mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-12-08 23:03:46 +00:00
277 lines
8.8 KiB
Diff
277 lines
8.8 KiB
Diff
|
Index: content/browser/child_process_security_policy_impl.cc
|
||
|
===================================================================
|
||
|
--- content/browser/child_process_security_policy_impl.cc (revision 233522)
|
||
|
+++ content/browser/child_process_security_policy_impl.cc (working copy)
|
||
|
@@ -793,7 +793,7 @@
|
||
|
bool ChildProcessSecurityPolicyImpl::CanSendCookiesForOrigin(int child_id,
|
||
|
const GURL& gurl) {
|
||
|
for (PluginProcessHostIterator iter; !iter.Done(); ++iter) {
|
||
|
- if (iter.GetData().process_type == child_id) {
|
||
|
+ if (iter.GetData().id == child_id) {
|
||
|
if (iter.GetData().process_type == PROCESS_TYPE_PLUGIN) {
|
||
|
// NPAPI plugin processes are unsandboxed and so are trusted. Plugins
|
||
|
// can make request to any origin.
|
||
|
Index: content/browser/plugin_browsertest.cc
|
||
|
===================================================================
|
||
|
--- content/browser/plugin_browsertest.cc (revision 233522)
|
||
|
+++ content/browser/plugin_browsertest.cc (working copy)
|
||
|
@@ -5,15 +5,21 @@
|
||
|
#include "base/command_line.h"
|
||
|
#include "base/file_util.h"
|
||
|
#include "base/path_service.h"
|
||
|
+#include "base/strings/string_util.h"
|
||
|
#include "base/strings/utf_string_conversions.h"
|
||
|
+#include "content/browser/loader/resource_dispatcher_host_impl.h"
|
||
|
#include "content/public/browser/browser_thread.h"
|
||
|
+#include "content/public/browser/resource_dispatcher_host_delegate.h"
|
||
|
#include "content/public/common/content_switches.h"
|
||
|
#include "content/public/test/browser_test_utils.h"
|
||
|
+#include "content/public/test/test_utils.h"
|
||
|
#include "content/shell/browser/shell.h"
|
||
|
#include "content/shell/common/shell_switches.h"
|
||
|
#include "content/test/content_browser_test.h"
|
||
|
#include "content/test/content_browser_test_utils.h"
|
||
|
#include "content/test/net/url_request_mock_http_job.h"
|
||
|
+#include "net/test/embedded_test_server/embedded_test_server.h"
|
||
|
+#include "net/url_request/url_request.h"
|
||
|
#include "ui/gfx/rect.h"
|
||
|
|
||
|
#if defined(OS_WIN)
|
||
|
@@ -468,4 +474,77 @@
|
||
|
}
|
||
|
#endif // defined(OS_WIN)
|
||
|
|
||
|
+class TestResourceDispatcherHostDelegate
|
||
|
+ : public ResourceDispatcherHostDelegate {
|
||
|
+ public:
|
||
|
+ TestResourceDispatcherHostDelegate() : found_cookie_(false) {}
|
||
|
+
|
||
|
+ bool found_cookie() { return found_cookie_; }
|
||
|
+
|
||
|
+ void WaitForPluginRequest() {
|
||
|
+ if (found_cookie_)
|
||
|
+ return;
|
||
|
+
|
||
|
+ runner_ = new MessageLoopRunner;
|
||
|
+ runner_->Run();
|
||
|
+ }
|
||
|
+
|
||
|
+ private:
|
||
|
+ // ResourceDispatcherHostDelegate implementation:
|
||
|
+ virtual void OnResponseStarted(
|
||
|
+ net::URLRequest* request,
|
||
|
+ ResourceContext* resource_context,
|
||
|
+ ResourceResponse* response,
|
||
|
+ IPC::Sender* sender) OVERRIDE {
|
||
|
+ // The URL below comes from plugin_geturl_test.cc.
|
||
|
+ if (!EndsWith(request->url().spec(),
|
||
|
+ "npapi/plugin_ref_target_page.html",
|
||
|
+ true)) {
|
||
|
+ return;
|
||
|
+ }
|
||
|
+ net::HttpRequestHeaders headers;
|
||
|
+ bool found_cookie = false;
|
||
|
+ if (request->GetFullRequestHeaders(&headers) &&
|
||
|
+ headers.ToString().find("Cookie: blah") != std::string::npos) {
|
||
|
+ found_cookie = true;
|
||
|
+ }
|
||
|
+ BrowserThread::PostTask(
|
||
|
+ BrowserThread::UI,
|
||
|
+ FROM_HERE,
|
||
|
+ base::Bind(&TestResourceDispatcherHostDelegate::GotCookie,
|
||
|
+ base::Unretained(this), found_cookie));
|
||
|
+ }
|
||
|
+
|
||
|
+ void GotCookie(bool found_cookie) {
|
||
|
+ found_cookie_ = found_cookie;
|
||
|
+ if (runner_)
|
||
|
+ runner_->QuitClosure().Run();
|
||
|
+ }
|
||
|
+
|
||
|
+ scoped_refptr<MessageLoopRunner> runner_;
|
||
|
+ bool found_cookie_;
|
||
|
+
|
||
|
+ DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate);
|
||
|
+};
|
||
|
+
|
||
|
+// Ensure that cookies get sent with plugin requests.
|
||
|
+IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Cookies)) {
|
||
|
+ // Create a new browser just to ensure that the plugin process' child_id is
|
||
|
+ // not equal to its type (PROCESS_TYPE_PLUGIN), as that was the error which
|
||
|
+ // caused this bug.
|
||
|
+ NavigateToURL(CreateBrowser(), GURL("about:blank"));
|
||
|
+
|
||
|
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
||
|
+ GURL url(embedded_test_server()->GetURL("/npapi/cookies.html"));
|
||
|
+
|
||
|
+ TestResourceDispatcherHostDelegate test_delegate;
|
||
|
+ ResourceDispatcherHostDelegate* old_delegate =
|
||
|
+ ResourceDispatcherHostImpl::Get()->delegate();
|
||
|
+ ResourceDispatcherHostImpl::Get()->SetDelegate(&test_delegate);
|
||
|
+ LoadAndWait(url);
|
||
|
+ test_delegate.WaitForPluginRequest();
|
||
|
+ ASSERT_TRUE(test_delegate.found_cookie());
|
||
|
+ ResourceDispatcherHostImpl::Get()->SetDelegate(old_delegate);
|
||
|
+}
|
||
|
+
|
||
|
} // namespace content
|
||
|
Index: content/test/data/npapi/cookies.html
|
||
|
===================================================================
|
||
|
--- content/test/data/npapi/cookies.html (revision 0)
|
||
|
+++ content/test/data/npapi/cookies.html (revision 0)
|
||
|
@@ -0,0 +1,27 @@
|
||
|
+<html>
|
||
|
+
|
||
|
+<head>
|
||
|
+<script src="npapi.js"></script>
|
||
|
+<script>document.cookie="blah"</script>
|
||
|
+</head>
|
||
|
+
|
||
|
+
|
||
|
+<body>
|
||
|
+<div id="statusPanel" style="border: 1px solid red; width: 100%">
|
||
|
+Test running....
|
||
|
+</div>
|
||
|
+
|
||
|
+
|
||
|
+Cookies Test<p>
|
||
|
+This test fetches an URL via the plugin, and verifies that the cookies are sent
|
||
|
+with plugin-initiated requests.
|
||
|
+
|
||
|
+<embed type="application/vnd.npapi-test"
|
||
|
+ src="foo"
|
||
|
+ name="cookies"
|
||
|
+ id="1"
|
||
|
+ mode="np_embed"
|
||
|
+>
|
||
|
+
|
||
|
+</body>
|
||
|
+</html>
|
||
|
|
||
|
Property changes on: content\test\data\npapi\cookies.html
|
||
|
___________________________________________________________________
|
||
|
Added: svn:mime-type
|
||
|
+ text/html
|
||
|
Added: svn:eol-style
|
||
|
+ LF
|
||
|
|
||
|
Index: content/test/plugin/plugin_geturl_test.cc
|
||
|
===================================================================
|
||
|
--- content/test/plugin/plugin_geturl_test.cc (revision 233522)
|
||
|
+++ content/test/plugin/plugin_geturl_test.cc (working copy)
|
||
|
@@ -48,7 +48,8 @@
|
||
|
expect_404_response_(false),
|
||
|
npn_evaluate_context_(false),
|
||
|
handle_url_redirects_(false),
|
||
|
- received_url_redirect_notification_(false) {
|
||
|
+ received_url_redirect_notification_(false),
|
||
|
+ check_cookies_(false) {
|
||
|
}
|
||
|
|
||
|
PluginGetURLTest::~PluginGetURLTest() {}
|
||
|
@@ -78,7 +79,14 @@
|
||
|
"geturlredirectnotify")) {
|
||
|
handle_url_redirects_ = true;
|
||
|
}
|
||
|
- return PluginTest::New(mode, argc, argn, argv, saved);
|
||
|
+
|
||
|
+ NPError error = PluginTest::New(mode, argc, argn, argv, saved);
|
||
|
+
|
||
|
+ // The above sets test_name().
|
||
|
+ if (test_name() == "cookies")
|
||
|
+ check_cookies_ = true;
|
||
|
+
|
||
|
+ return error;
|
||
|
}
|
||
|
|
||
|
NPError PluginGetURLTest::SetWindow(NPWindow* pNPWindow) {
|
||
|
@@ -108,6 +116,13 @@
|
||
|
id(), REDIRECT_SRC_URL, NULL,
|
||
|
reinterpret_cast<void*>(REDIRECT_SRC_URL_NOTIFICATION_ID));
|
||
|
return NPERR_NO_ERROR;
|
||
|
+ } else if (check_cookies_) {
|
||
|
+ HostFunctions()->geturlnotify(
|
||
|
+ id(),
|
||
|
+ "plugin_ref_target_page.html",
|
||
|
+ NULL,
|
||
|
+ reinterpret_cast<void*>(SELF_URL_STREAM_ID));
|
||
|
+ return NPERR_NO_ERROR;
|
||
|
}
|
||
|
|
||
|
std::string url = SELF_URL;
|
||
|
@@ -161,7 +176,7 @@
|
||
|
return NPERR_NO_ERROR;
|
||
|
}
|
||
|
|
||
|
- if (!fail_write_url_.empty()) {
|
||
|
+ if (!fail_write_url_.empty() || check_cookies_) {
|
||
|
return NPERR_NO_ERROR;
|
||
|
}
|
||
|
|
||
|
@@ -217,7 +232,7 @@
|
||
|
return PluginTest::WriteReady(stream);
|
||
|
}
|
||
|
|
||
|
- if (!referrer_target_url_.empty()) {
|
||
|
+ if (!referrer_target_url_.empty() || check_cookies_) {
|
||
|
return STREAM_CHUNK;
|
||
|
}
|
||
|
|
||
|
@@ -242,7 +257,7 @@
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
- if (!referrer_target_url_.empty()) {
|
||
|
+ if (!referrer_target_url_.empty() || check_cookies_) {
|
||
|
return len;
|
||
|
}
|
||
|
|
||
|
@@ -314,6 +329,11 @@
|
||
|
return NPERR_NO_ERROR;
|
||
|
}
|
||
|
|
||
|
+ if (check_cookies_) {
|
||
|
+ SignalTestCompleted();
|
||
|
+ return NPERR_NO_ERROR;
|
||
|
+ }
|
||
|
+
|
||
|
unsigned long stream_id =
|
||
|
reinterpret_cast<unsigned long>(stream->notifyData);
|
||
|
switch (stream_id) {
|
||
|
@@ -367,6 +387,9 @@
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
+ if (check_cookies_)
|
||
|
+ return;
|
||
|
+
|
||
|
COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(data), cast_validity_check);
|
||
|
unsigned long stream_id = reinterpret_cast<unsigned long>(data);
|
||
|
switch (stream_id) {
|
||
|
Index: content/test/plugin/plugin_geturl_test.h
|
||
|
===================================================================
|
||
|
--- content/test/plugin/plugin_geturl_test.h (revision 233522)
|
||
|
+++ content/test/plugin/plugin_geturl_test.h (working copy)
|
||
|
@@ -57,6 +57,7 @@
|
||
|
std::string page_not_found_url_;
|
||
|
std::string fail_write_url_;
|
||
|
std::string referrer_target_url_;
|
||
|
+ bool check_cookies_;
|
||
|
};
|
||
|
|
||
|
} // namespace NPAPIClient
|
||
|
Index: content/test/plugin/plugin_test_factory.cc
|
||
|
===================================================================
|
||
|
--- content/test/plugin/plugin_test_factory.cc (revision 233522)
|
||
|
+++ content/test/plugin/plugin_test_factory.cc (working copy)
|
||
|
@@ -38,7 +38,8 @@
|
||
|
} else if (test_name == "geturl" || test_name == "geturl_404_response" ||
|
||
|
test_name == "geturl_fail_write" ||
|
||
|
test_name == "plugin_referrer_test" ||
|
||
|
- test_name == "geturlredirectnotify") {
|
||
|
+ test_name == "geturlredirectnotify" ||
|
||
|
+ test_name == "cookies") {
|
||
|
new_test = new PluginGetURLTest(instance, host_functions);
|
||
|
} else if (test_name == "npobject_identity") {
|
||
|
new_test = new NPObjectIdentityTest(instance, host_functions);
|