Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: chrome/browser/automation/automation_resource_message_filter.cc

Issue 3066004: ChromeFrame cookie requests would incorrectly get routed to the first host br... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/automation/automation_resource_message_filter.cc
===================================================================
--- chrome/browser/automation/automation_resource_message_filter.cc (revision 53631)
+++ chrome/browser/automation/automation_resource_message_filter.cc (working copy)
@@ -13,6 +13,7 @@
#include "chrome/browser/net/url_request_mock_util.h"
#include "chrome/browser/net/url_request_slow_download_job.h"
#include "chrome/browser/net/url_request_slow_http_job.h"
+#include "chrome/browser/renderer_host/resource_message_filter.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/browser/chrome_thread.h"
#include "chrome/test/automation/automation_messages.h"
@@ -21,14 +22,24 @@
#include "net/base/net_errors.h"
#include "net/url_request/url_request_filter.h"
-AutomationResourceMessageFilter::RenderViewMap
- AutomationResourceMessageFilter::filtered_render_views_;
+base::LazyInstance<AutomationResourceMessageFilter::RenderViewMap>
+ AutomationResourceMessageFilter::filtered_render_views_(
+ base::LINKER_INITIALIZED);
+base::LazyInstance<AutomationResourceMessageFilter::CompletionCallbackMap>
+ AutomationResourceMessageFilter::completion_callback_map_(
+ base::LINKER_INITIALIZED);
+
int AutomationResourceMessageFilter::unique_request_id_ = 1;
+int AutomationResourceMessageFilter::next_completion_callback_id_ = 0;
AutomationResourceMessageFilter::AutomationResourceMessageFilter()
- : channel_(NULL),
- next_completion_callback_id_(0) {
+ : channel_(NULL) {
+ // Ensure that an instance of the callback map is created.
+ completion_callback_map_.Get();
+ // Ensure that an instance of the render view map is created.
+ filtered_render_views_.Get();
+
ChromeThread::PostTask(
ChromeThread::IO, FROM_HERE,
NewRunnableFunction(
@@ -59,11 +70,11 @@
// Only erase RenderViews which are associated with this
// AutomationResourceMessageFilter instance.
- RenderViewMap::iterator index = filtered_render_views_.begin();
- while (index != filtered_render_views_.end()) {
+ RenderViewMap::iterator index = filtered_render_views_.Get().begin();
+ while (index != filtered_render_views_.Get().end()) {
const AutomationDetails& details = (*index).second;
if (details.filter.get() == this) {
- filtered_render_views_.erase(index++);
+ filtered_render_views_.Get().erase(index++);
} else {
index++;
}
@@ -200,12 +211,13 @@
int tab_handle, AutomationResourceMessageFilter* filter,
bool pending_view) {
RenderViewMap::iterator automation_details_iter(
- filtered_render_views_.find(RendererId(renderer_pid, renderer_id)));
- if (automation_details_iter != filtered_render_views_.end()) {
+ filtered_render_views_.Get().find(RendererId(renderer_pid,
+ renderer_id)));
+ if (automation_details_iter != filtered_render_views_.Get().end()) {
DCHECK(automation_details_iter->second.ref_count > 0);
automation_details_iter->second.ref_count++;
} else {
- filtered_render_views_[RendererId(renderer_pid, renderer_id)] =
+ filtered_render_views_.Get()[RendererId(renderer_pid, renderer_id)] =
AutomationDetails(tab_handle, filter, pending_view);
}
}
@@ -214,9 +226,10 @@
void AutomationResourceMessageFilter::UnRegisterRenderViewInIOThread(
int renderer_pid, int renderer_id) {
RenderViewMap::iterator automation_details_iter(
- filtered_render_views_.find(RendererId(renderer_pid, renderer_id)));
+ filtered_render_views_.Get().find(RendererId(renderer_pid,
+ renderer_id)));
- if (automation_details_iter == filtered_render_views_.end()) {
+ if (automation_details_iter == filtered_render_views_.Get().end()) {
LOG(INFO) << "UnRegisterRenderViewInIOThread: already unregistered";
return;
}
@@ -224,7 +237,7 @@
automation_details_iter->second.ref_count--;
if (automation_details_iter->second.ref_count <= 0) {
- filtered_render_views_.erase(RendererId(renderer_pid, renderer_id));
+ filtered_render_views_.Get().erase(RendererId(renderer_pid, renderer_id));
}
}
@@ -235,9 +248,10 @@
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
RenderViewMap::iterator automation_details_iter(
- filtered_render_views_.find(RendererId(renderer_pid, renderer_id)));
+ filtered_render_views_.Get().find(RendererId(renderer_pid,
+ renderer_id)));
- if (automation_details_iter == filtered_render_views_.end()) {
+ if (automation_details_iter == filtered_render_views_.Get().end()) {
NOTREACHED() << "Failed to find pending view for renderer pid:"
<< renderer_pid
<< ", render view id:"
@@ -251,7 +265,7 @@
automation_details_iter->second.filter;
DCHECK(old_filter != NULL);
- filtered_render_views_[RendererId(renderer_pid, renderer_id)] =
+ filtered_render_views_.Get()[RendererId(renderer_pid, renderer_id)] =
AutomationDetails(tab_handle, filter, false);
ResumeJobsForPendingView(tab_handle, old_filter, filter);
@@ -261,9 +275,9 @@
bool AutomationResourceMessageFilter::LookupRegisteredRenderView(
int renderer_pid, int renderer_id, AutomationDetails* details) {
bool found = false;
- RenderViewMap::iterator it = filtered_render_views_.find(RendererId(
+ RenderViewMap::iterator it = filtered_render_views_.Get().find(RendererId(
renderer_pid, renderer_id));
- if (it != filtered_render_views_.end()) {
+ if (it != filtered_render_views_.Get().end()) {
found = true;
if (details)
*details = it->second;
@@ -325,32 +339,46 @@
DCHECK(callback != NULL);
DCHECK(cookie_store != NULL);
+ GetCookiesCompletion* get_cookies_callback =
+ static_cast<GetCookiesCompletion*>(callback);
+
+ RenderViewMap::iterator automation_details_iter(
+ filtered_render_views_.Get().find(RendererId(
+ get_cookies_callback->render_process_id(),
+ get_cookies_callback->render_view_id())));
Jeff Timanus 2010/07/27 18:14:12 Nit: 4 space indents.
+
+ DCHECK(automation_details_iter->second.filter != NULL);
+
int completion_callback_id = GetNextCompletionCallbackId();
- DCHECK(!ContainsKey(completion_callback_map_, completion_callback_id));
+ DCHECK(!ContainsKey(completion_callback_map_.Get(), completion_callback_id));
CookieCompletionInfo cookie_info;
cookie_info.completion_callback = callback;
cookie_info.cookie_store = cookie_store;
- completion_callback_map_[completion_callback_id] = cookie_info;
+ completion_callback_map_.Get()[completion_callback_id] = cookie_info;
- Send(new AutomationMsg_GetCookiesFromHost(0, tab_handle, url,
- completion_callback_id));
+ if (automation_details_iter->second.filter) {
+ automation_details_iter->second.filter->Send(
+ new AutomationMsg_GetCookiesFromHost(
+ 0, automation_details_iter->second.tab_handle, url,
+ completion_callback_id));
+ }
}
void AutomationResourceMessageFilter::OnGetCookiesHostResponse(
int tab_handle, bool success, const GURL& url, const std::string& cookies,
int cookie_id) {
CompletionCallbackMap::iterator index =
- completion_callback_map_.find(cookie_id);
- if (index != completion_callback_map_.end()) {
+ completion_callback_map_.Get().find(cookie_id);
+ if (index != completion_callback_map_.Get().end()) {
net::CompletionCallback* callback = index->second.completion_callback;
scoped_refptr<net::CookieStore> cookie_store = index->second.cookie_store;
DCHECK(callback != NULL);
DCHECK(cookie_store.get() != NULL);
- completion_callback_map_.erase(index);
+ completion_callback_map_.Get().erase(index);
// Set the cookie in the cookie store so that the callback can read it.
cookie_store->SetCookieWithOptions(url, cookies, net::CookieOptions());
@@ -367,6 +395,25 @@
}
}
+void AutomationResourceMessageFilter::SetCookiesForUrl(
+ int tab_handle, const GURL&url, const std::string& cookie_line,
+ net::CompletionCallback* callback) {
+ SetCookieCompletion* set_cookies_callback =
+ static_cast<SetCookieCompletion*>(callback);
+
+ RenderViewMap::iterator automation_details_iter(
+ filtered_render_views_.Get().find(RendererId(
+ set_cookies_callback->render_process_id(),
+ set_cookies_callback->render_view_id())));
+
+ DCHECK(automation_details_iter->second.filter != NULL);
+
+ if (automation_details_iter->second.filter) {
+ automation_details_iter->second.filter->Send(
+ new AutomationMsg_SetCookieAsync(0, tab_handle, url, cookie_line));
+ }
+}
+
// static
void AutomationResourceMessageFilter::ResumeJobsForPendingView(
int tab_handle,

Powered by Google App Engine
This is Rietveld 408576698