diff options
-rw-r--r-- | chrome/browser/automation/automation_resource_message_filter.cc | 5 | ||||
-rw-r--r-- | chrome/browser/renderer_host/chrome_render_message_filter.cc | 9 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 16 | ||||
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.cc | 30 | ||||
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.h | 10 | ||||
-rw-r--r-- | content/renderer/content_renderer_client.h | 15 | ||||
-rw-r--r-- | content/renderer/mock_content_renderer_client.cc | 15 | ||||
-rw-r--r-- | content/renderer/mock_content_renderer_client.h | 10 | ||||
-rw-r--r-- | content/renderer/renderer_webcookiejar_impl.cc | 19 | ||||
-rw-r--r-- | content/renderer/renderer_webcookiejar_impl.h | 7 |
10 files changed, 122 insertions, 14 deletions
diff --git a/chrome/browser/automation/automation_resource_message_filter.cc b/chrome/browser/automation/automation_resource_message_filter.cc index d64f5a1..664efcf 100644 --- a/chrome/browser/automation/automation_resource_message_filter.cc +++ b/chrome/browser/automation/automation_resource_message_filter.cc @@ -12,9 +12,9 @@ #include "chrome/browser/net/url_request_mock_util.h" #include "chrome/common/automation_messages.h" #include "chrome/common/chrome_paths.h" +#include "chrome/common/render_messages.h" #include "content/browser/browser_message_filter.h" #include "content/browser/browser_thread.h" -#include "content/common/view_messages.h" #include "googleurl/src/gurl.h" #include "net/base/net_errors.h" #include "net/url_request/url_request_context.h" @@ -446,7 +446,8 @@ void AutomationResourceMessageFilter::OnGetCookiesHostResponse( return; } - ViewHostMsg_GetCookies::WriteReplyParams(index->second.reply_msg, cookies); + ChromeViewHostMsg_GetCookies::WriteReplyParams(index->second.reply_msg, + cookies); index->second.filter->Send(index->second.reply_msg); completion_callback_map_.Get().erase(index); diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc index da790ae..8cab495 100644 --- a/chrome/browser/renderer_host/chrome_render_message_filter.cc +++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc @@ -143,15 +143,16 @@ bool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message, IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() - if ((message.type() == ViewHostMsg_GetCookies::ID || - message.type() == ViewHostMsg_SetCookie::ID) && + if ((message.type() == ChromeViewHostMsg_GetCookies::ID || + message.type() == ChromeViewHostMsg_SetCookie::ID) && AutomationResourceMessageFilter::ShouldFilterCookieMessages( render_process_id_, message.routing_id())) { // ChromeFrame then we need to get/set cookies from the external host. IPC_BEGIN_MESSAGE_MAP_EX(ChromeRenderMessageFilter, message, *message_was_ok) - IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetCookies, OnGetCookies) - IPC_MESSAGE_HANDLER(ViewHostMsg_SetCookie, OnSetCookie) + IPC_MESSAGE_HANDLER_DELAY_REPLY(ChromeViewHostMsg_GetCookies, + OnGetCookies) + IPC_MESSAGE_HANDLER(ChromeViewHostMsg_SetCookie, OnSetCookie) IPC_END_MESSAGE_MAP() handled = true; } diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h index 4b58bcf..f28e17d 100644 --- a/chrome/common/render_messages.h +++ b/chrome/common/render_messages.h @@ -532,3 +532,19 @@ IPC_MESSAGE_ROUTED2(ChromeViewHostMsg_InstantSupportDetermined, // The currently displayed PDF has an unsupported feature. IPC_MESSAGE_ROUTED0(ChromeViewHostMsg_PDFHasUnsupportedFeature) +// The following messages are used to set and get cookies for ChromeFrame +// processes. +// Used to set a cookie. The cookie is set asynchronously, but will be +// available to a subsequent ChromeViewHostMsg_GetCookies request. +IPC_MESSAGE_ROUTED3(ChromeViewHostMsg_SetCookie, + GURL /* url */, + GURL /* first_party_for_cookies */, + std::string /* cookie */) + +// Used to get cookies for the given URL. This may block waiting for a +// previous SetCookie message to be processed. +IPC_SYNC_MESSAGE_ROUTED2_1(ChromeViewHostMsg_GetCookies, + GURL /* url */, + GURL /* first_party_for_cookies */, + std::string /* cookies */) + diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index c197af9..7f625c9 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc @@ -66,6 +66,7 @@ #include "grit/generated_resources.h" #include "grit/locale_settings.h" #include "grit/renderer_resources.h" +#include "ipc/ipc_sync_message.h" #include "net/base/net_errors.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" @@ -684,6 +685,35 @@ bool ChromeContentRendererClient::ShouldOverridePageVisibilityState( return true; } +bool ChromeContentRendererClient::HandleGetCookieRequest( + RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + std::string* cookies) { + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame)) { + IPC::SyncMessage* msg = new ChromeViewHostMsg_GetCookies( + MSG_ROUTING_NONE, url, first_party_for_cookies, cookies); + msg->EnableMessagePumping(); + sender->Send(msg); + return true; + } + return false; +} + +bool ChromeContentRendererClient::HandleSetCookieRequest( + RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + const std::string& value) { + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame)) { + sender->Send(new ChromeViewHostMsg_SetCookie( + MSG_ROUTING_NONE, url, first_party_for_cookies, value)); + return true; + } + return false; +} + + void ChromeContentRendererClient::SetExtensionDispatcher( ExtensionDispatcher* extension_dispatcher) { extension_dispatcher_.reset(extension_dispatcher); diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h index 2ce9639..1b9073e 100644 --- a/chrome/renderer/chrome_content_renderer_client.h +++ b/chrome/renderer/chrome_content_renderer_client.h @@ -6,6 +6,8 @@ #define CHROME_RENDERER_CHROME_CONTENT_RENDERER_CLIENT_H_ #pragma once +#include <string> + #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "content/renderer/content_renderer_client.h" @@ -73,6 +75,14 @@ class ChromeContentRendererClient : public content::ContentRendererClient { virtual bool ShouldOverridePageVisibilityState( const RenderView* render_view, WebKit::WebPageVisibilityState* override_state) const OVERRIDE; + virtual bool HandleGetCookieRequest(RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + std::string* cookies) OVERRIDE; + virtual bool HandleSetCookieRequest(RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + const std::string& value) OVERRIDE; // For testing. void SetExtensionDispatcher(ExtensionDispatcher* extension_dispatcher); diff --git a/content/renderer/content_renderer_client.h b/content/renderer/content_renderer_client.h index 2ebbf98..33387e8 100644 --- a/content/renderer/content_renderer_client.h +++ b/content/renderer/content_renderer_client.h @@ -9,6 +9,7 @@ #include <string> #include "base/string16.h" +#include "ipc/ipc_message.h" #include "content/common/content_client.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebPageVisibilityState.h" @@ -109,6 +110,20 @@ class ContentRendererClient { virtual bool ShouldOverridePageVisibilityState( const RenderView* render_view, WebKit::WebPageVisibilityState* override_state) const = 0; + + // Return true if the GetCookie request will be handled by the embedder. + // Cookies are returned in the cookie parameter. + virtual bool HandleGetCookieRequest(RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + std::string* cookies) = 0; + + // Return true if the SetCookie request will be handled by the embedder. + // Cookies to be set are passed in the value parameter. + virtual bool HandleSetCookieRequest(RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + const std::string& value) = 0; }; } // namespace content diff --git a/content/renderer/mock_content_renderer_client.cc b/content/renderer/mock_content_renderer_client.cc index dc931c8..930beff 100644 --- a/content/renderer/mock_content_renderer_client.cc +++ b/content/renderer/mock_content_renderer_client.cc @@ -104,4 +104,19 @@ bool MockContentRendererClient::ShouldOverridePageVisibilityState( return false; } +bool MockContentRendererClient::HandleGetCookieRequest( + RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + std::string* cookies) { + return false; +} + +bool MockContentRendererClient::HandleSetCookieRequest( + RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + const std::string& value) { + return false; +} } // namespace content diff --git a/content/renderer/mock_content_renderer_client.h b/content/renderer/mock_content_renderer_client.h index 5c0668f..edade85 100644 --- a/content/renderer/mock_content_renderer_client.h +++ b/content/renderer/mock_content_renderer_client.h @@ -6,6 +6,8 @@ #define CONTENT_RENDERER_MOCK_CONTENT_RENDERER_CLIENT_H_ #pragma once +#include <string> + #include "base/compiler_specific.h" #include "content/renderer/content_renderer_client.h" @@ -53,6 +55,14 @@ class MockContentRendererClient : public ContentRendererClient { virtual bool ShouldOverridePageVisibilityState( const RenderView* render_view, WebKit::WebPageVisibilityState* override_state) const OVERRIDE; + virtual bool HandleGetCookieRequest(RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + std::string* cookies) OVERRIDE; + virtual bool HandleSetCookieRequest(RenderView* sender, + const GURL& url, + const GURL& first_party_for_cookies, + const std::string& value) OVERRIDE; }; } // namespace content diff --git a/content/renderer/renderer_webcookiejar_impl.cc b/content/renderer/renderer_webcookiejar_impl.cc index 75f1e30..53cec96 100644 --- a/content/renderer/renderer_webcookiejar_impl.cc +++ b/content/renderer/renderer_webcookiejar_impl.cc @@ -6,7 +6,9 @@ #include "base/utf_string_conversions.h" #include "content/common/view_messages.h" +#include "content/renderer/content_renderer_client.h" #include "content/renderer/render_thread.h" +#include "content/renderer/render_view.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCookie.h" #include "webkit/glue/webcookie.h" @@ -20,16 +22,23 @@ void RendererWebCookieJarImpl::setCookie( const WebString& value) { std::string value_utf8; UTF16ToUTF8(value.data(), value.length(), &value_utf8); - sender_->Send(new ViewHostMsg_SetCookie( - MSG_ROUTING_NONE, url, first_party_for_cookies, value_utf8)); + if (!content::GetContentClient()->renderer()->HandleSetCookieRequest( + sender_, url, first_party_for_cookies, value_utf8)) { + sender_->Send(new ViewHostMsg_SetCookie( + MSG_ROUTING_NONE, url, first_party_for_cookies, value_utf8)); + } } WebString RendererWebCookieJarImpl::cookies( const WebURL& url, const WebURL& first_party_for_cookies) { std::string value_utf8; - // NOTE: This may pump events (see RenderThread::Send). - sender_->Send(new ViewHostMsg_GetCookies( - MSG_ROUTING_NONE, url, first_party_for_cookies, &value_utf8)); + + if (!content::GetContentClient()->renderer()->HandleGetCookieRequest( + sender_, url, first_party_for_cookies, &value_utf8)) { + // NOTE: This may pump events (see RenderThread::Send). + sender_->Send(new ViewHostMsg_GetCookies( + MSG_ROUTING_NONE, url, first_party_for_cookies, &value_utf8)); + } return WebString::fromUTF8(value_utf8); } diff --git a/content/renderer/renderer_webcookiejar_impl.h b/content/renderer/renderer_webcookiejar_impl.h index dcd1d3f..a8cae40 100644 --- a/content/renderer/renderer_webcookiejar_impl.h +++ b/content/renderer/renderer_webcookiejar_impl.h @@ -6,7 +6,6 @@ #define CONTENT_RENDERER_RENDERER_WEBCOOKIEJAR_IMPL_H_ #pragma once -#include "ipc/ipc_message.h" // TODO(darin): WebCookieJar.h is missing a WebString.h include! #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCookieJar.h" @@ -15,9 +14,11 @@ namespace IPC { class SyncMessage; } +class RenderView; + class RendererWebCookieJarImpl : public WebKit::WebCookieJar { public: - explicit RendererWebCookieJarImpl(IPC::Message::Sender* sender) + explicit RendererWebCookieJarImpl(RenderView* sender) : sender_(sender) { } virtual ~RendererWebCookieJarImpl() {} @@ -39,7 +40,7 @@ class RendererWebCookieJarImpl : public WebKit::WebCookieJar { virtual bool cookiesEnabled( const WebKit::WebURL& url, const WebKit::WebURL& first_party_for_cookies); - IPC::Message::Sender* sender_; + RenderView* sender_; }; #endif // CONTENT_RENDERER_RENDERER_WEBCOOKIEJAR_IMPL_H_ |