summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/automation/automation_resource_message_filter.cc5
-rw-r--r--chrome/browser/renderer_host/chrome_render_message_filter.cc9
-rw-r--r--chrome/common/render_messages.h16
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc30
-rw-r--r--chrome/renderer/chrome_content_renderer_client.h10
-rw-r--r--content/renderer/content_renderer_client.h15
-rw-r--r--content/renderer/mock_content_renderer_client.cc15
-rw-r--r--content/renderer/mock_content_renderer_client.h10
-rw-r--r--content/renderer/renderer_webcookiejar_impl.cc19
-rw-r--r--content/renderer/renderer_webcookiejar_impl.h7
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_