diff options
author | pastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-24 21:36:14 +0000 |
---|---|---|
committer | pastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-24 21:36:14 +0000 |
commit | f23d4da9135be3862d1b9a209628876987961d5e (patch) | |
tree | 9fee5c50212fbb8dea025a27443f82033d6a5f54 /chrome/browser/renderer_host | |
parent | adc49f878ad08747893df60843f332f471397c5e (diff) | |
download | chromium_src-f23d4da9135be3862d1b9a209628876987961d5e.zip chromium_src-f23d4da9135be3862d1b9a209628876987961d5e.tar.gz chromium_src-f23d4da9135be3862d1b9a209628876987961d5e.tar.bz2 |
Implemented IPC message to check whether cookies are enabled.
If you want to test this simply load some page in the browser. Go to
settings and disable cookies. Then type in the address bar :
javascript:alert(navigator.cookieEnabled);
You should see a box saying "false" if you see true or even worse
don't see anything at all the test has failed.
BUG=63309
TEST=Disable cookies and try alert(navigator.cookieEnabled); should be false.
Review URL: http://codereview.chromium.org/5091006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67319 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter.cc | 40 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter.h | 16 |
2 files changed, 56 insertions, 0 deletions
diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc index 017b2c3..3ebeb17 100644 --- a/chrome/browser/renderer_host/resource_message_filter.cc +++ b/chrome/browser/renderer_host/resource_message_filter.cc @@ -443,6 +443,8 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetRawCookies, OnGetRawCookies) IPC_MESSAGE_HANDLER(ViewHostMsg_DeleteCookie, OnDeleteCookie) + IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_CookiesEnabled, + OnCookiesEnabled) #if defined(OS_MACOSX) IPC_MESSAGE_HANDLER(ViewHostMsg_LoadFont, OnLoadFont) #endif @@ -752,6 +754,28 @@ void ResourceMessageFilter::OnDeleteCookie(const GURL& url, context->cookie_store()->DeleteCookie(url, cookie_name); } +void ResourceMessageFilter::OnCookiesEnabled( + const GURL& url, + const GURL& first_party_for_cookies, + IPC::Message* reply_msg) { + URLRequestContext* context = GetRequestContextForURL(url); + CookiesEnabledCompletion* callback = + new CookiesEnabledCompletion(reply_msg, this); + int policy = net::OK; + // TODO(ananta): If this render view is associated with an automation channel, + // aka ChromeFrame then we need to retrieve cookie settings from the external + // host. + if (context->cookie_policy()) { + policy = context->cookie_policy()->CanGetCookies( + url, first_party_for_cookies, callback); + if (policy == net::ERR_IO_PENDING) { + Send(new ViewMsg_SignalCookiePromptEvent()); + return; // CanGetCookies will take care to call our callback in this case. + } + } + callback->Run(policy); +} + #if defined(OS_MACOSX) void ResourceMessageFilter::OnLoadFont(const FontDescriptor& font, uint32* handle_size, @@ -1796,3 +1820,19 @@ void GetCookiesCompletion::RunWithParams(const Tuple1<int>& params) { void GetCookiesCompletion::set_cookie_store(CookieStore* cookie_store) { cookie_store_ = cookie_store; } + +CookiesEnabledCompletion::CookiesEnabledCompletion( + IPC::Message* reply_msg, + ResourceMessageFilter* filter) + : reply_msg_(reply_msg), + filter_(filter) { +} + +CookiesEnabledCompletion::~CookiesEnabledCompletion() {} + +void CookiesEnabledCompletion::RunWithParams(const Tuple1<int>& params) { + bool result = params.a != net::ERR_ACCESS_DENIED; + ViewHostMsg_CookiesEnabled::WriteReplyParams(reply_msg_, result); + filter_->Send(reply_msg_); + delete this; +} diff --git a/chrome/browser/renderer_host/resource_message_filter.h b/chrome/browser/renderer_host/resource_message_filter.h index 9266277..38f8f15 100644 --- a/chrome/browser/renderer_host/resource_message_filter.h +++ b/chrome/browser/renderer_host/resource_message_filter.h @@ -158,6 +158,9 @@ class ResourceMessageFilter : public IPC::ChannelProxy::MessageFilter, IPC::Message* reply_msg); void OnDeleteCookie(const GURL& url, const std::string& cookieName); + void OnCookiesEnabled(const GURL& url, + const GURL& first_party_for_cookies, + IPC::Message* reply_msg); void OnPluginFileDialog(const IPC::Message& msg, bool multiple_files, const std::wstring& title, @@ -575,4 +578,17 @@ class GetCookiesCompletion : public net::CompletionCallback { scoped_refptr<net::CookieStore> cookie_store_; }; +class CookiesEnabledCompletion : public net::CompletionCallback { + public: + CookiesEnabledCompletion(IPC::Message* reply_msg, + ResourceMessageFilter* filter); + virtual ~CookiesEnabledCompletion(); + + virtual void RunWithParams(const Tuple1<int>& params); + + private: + IPC::Message* reply_msg_; + scoped_refptr<ResourceMessageFilter> filter_; +}; + #endif // CHROME_BROWSER_RENDERER_HOST_RESOURCE_MESSAGE_FILTER_H_ |