summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-18 06:43:30 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-18 06:43:30 +0000
commitb765debf3f3395bf7677643e0c315cb778e77567 (patch)
treede18b41e644f31ca4909eb0127546359abddae3d
parent1f1dde8e92b7be25aa5eec4238b2fa1212b86598 (diff)
downloadchromium_src-b765debf3f3395bf7677643e0c315cb778e77567.zip
chromium_src-b765debf3f3395bf7677643e0c315cb778e77567.tar.gz
chromium_src-b765debf3f3395bf7677643e0c315cb778e77567.tar.bz2
Chrome side of making SharedWorkerRepositoryClient be per RenderFrame instead of RenderView.
This also fixes the TODOs from r241306 in tab_specific_content_settings.cc The RenderView ID is still being sent to the browser because it's used by ResourceRequestInfo::GetAssociatedRenderView. Fixing that will be a large change by itself, so I'll do that in a followup. One minor behavior change is that the per-RenderView limit on how many shared workers can be started is now per-RenderFrame. Given that shared workers will be moved to the renderer process, I'm not too concerned about that. BUG=304341 R=nasko@chromium.org Review URL: https://codereview.chromium.org/109213006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241514 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--android_webview/browser/aw_content_browser_client.cc6
-rw-r--r--android_webview/browser/aw_content_browser_client.h6
-rw-r--r--chrome/browser/chrome_content_browser_client.cc12
-rw-r--r--chrome/browser/chrome_content_browser_client.h6
-rw-r--r--chrome/browser/content_settings/tab_specific_content_settings.cc18
-rw-r--r--chrome/browser/extensions/api/web_navigation/web_navigation_api.cc40
-rw-r--r--chrome/browser/extensions/api/web_navigation/web_navigation_api.h3
-rw-r--r--chrome/browser/prerender/prerender_contents.cc1
-rw-r--r--chrome/browser/prerender/prerender_contents.h1
-rw-r--r--content/browser/frame_host/render_frame_host_delegate.h3
-rw-r--r--content/browser/loader/resource_dispatcher_host_impl.cc18
-rw-r--r--content/browser/loader/resource_dispatcher_host_impl.h8
-rw-r--r--content/browser/renderer_host/render_view_host_delegate.h4
-rw-r--r--content/browser/web_contents/web_contents_impl.cc17
-rw-r--r--content/browser/web_contents/web_contents_impl.h3
-rw-r--r--content/browser/worker_host/test/worker_browsertest.cc10
-rw-r--r--content/browser/worker_host/worker_document_set.cc11
-rw-r--r--content/browser/worker_host/worker_document_set.h8
-rw-r--r--content/browser/worker_host/worker_process_host.cc29
-rw-r--r--content/browser/worker_host/worker_process_host.h6
-rw-r--r--content/browser/worker_host/worker_service_impl.cc67
-rw-r--r--content/browser/worker_host/worker_service_impl.h8
-rw-r--r--content/common/view_messages.h5
-rw-r--r--content/public/browser/content_browser_client.cc6
-rw-r--r--content/public/browser/content_browser_client.h10
-rw-r--r--content/public/browser/resource_request_details.cc4
-rw-r--r--content/public/browser/resource_request_details.h1
-rw-r--r--content/public/browser/web_contents_observer.h1
-rw-r--r--content/renderer/render_frame_impl.cc2
-rw-r--r--content/renderer/render_view_impl.cc3
-rw-r--r--content/renderer/shared_worker_repository.cc18
-rw-r--r--content/renderer/shared_worker_repository.h11
-rw-r--r--content/renderer/websharedworker_proxy.cc5
-rw-r--r--content/renderer/websharedworker_proxy.h6
34 files changed, 170 insertions, 187 deletions
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 75a082a..0651bab 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -289,7 +289,7 @@ bool AwContentBrowserClient::AllowWorkerDatabase(
const string16& display_name,
unsigned long estimated_size,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
// Android WebView does not yet support web workers.
return false;
}
@@ -297,7 +297,7 @@ bool AwContentBrowserClient::AllowWorkerDatabase(
bool AwContentBrowserClient::AllowWorkerFileSystem(
const GURL& url,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
// Android WebView does not yet support web workers.
return false;
}
@@ -306,7 +306,7 @@ bool AwContentBrowserClient::AllowWorkerIndexedDB(
const GURL& url,
const string16& name,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
// Android WebView does not yet support web workers.
return false;
}
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h
index c9e23bc..3f81eca 100644
--- a/android_webview/browser/aw_content_browser_client.h
+++ b/android_webview/browser/aw_content_browser_client.h
@@ -80,16 +80,16 @@ class AwContentBrowserClient : public content::ContentBrowserClient {
const string16& display_name,
unsigned long estimated_size,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) OVERRIDE;
+ const std::vector<std::pair<int, int> >& render_frames) OVERRIDE;
virtual bool AllowWorkerFileSystem(
const GURL& url,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) OVERRIDE;
+ const std::vector<std::pair<int, int> >& render_frames) OVERRIDE;
virtual bool AllowWorkerIndexedDB(
const GURL& url,
const string16& name,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) OVERRIDE;
+ const std::vector<std::pair<int, int> >& render_frames) OVERRIDE;
virtual content::QuotaPermissionContext*
CreateQuotaPermissionContext() OVERRIDE;
virtual void AllowCertificateError(
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 9c23d5c..c395507 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1672,7 +1672,7 @@ bool ChromeContentBrowserClient::AllowWorkerDatabase(
const base::string16& display_name,
unsigned long estimated_size,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
ProfileIOData* io_data = ProfileIOData::FromResourceContext(context);
CookieSettings* cookie_settings = io_data->GetCookieSettings();
@@ -1680,7 +1680,7 @@ bool ChromeContentBrowserClient::AllowWorkerDatabase(
// Record access to database for potential display in UI.
std::vector<std::pair<int, int> >::const_iterator i;
- for (i = render_views.begin(); i != render_views.end(); ++i) {
+ for (i = render_frames.begin(); i != render_frames.end(); ++i) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed,
@@ -1693,7 +1693,7 @@ bool ChromeContentBrowserClient::AllowWorkerDatabase(
bool ChromeContentBrowserClient::AllowWorkerFileSystem(
const GURL& url,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
ProfileIOData* io_data = ProfileIOData::FromResourceContext(context);
CookieSettings* cookie_settings = io_data->GetCookieSettings();
@@ -1701,7 +1701,7 @@ bool ChromeContentBrowserClient::AllowWorkerFileSystem(
// Record access to file system for potential display in UI.
std::vector<std::pair<int, int> >::const_iterator i;
- for (i = render_views.begin(); i != render_views.end(); ++i) {
+ for (i = render_frames.begin(); i != render_frames.end(); ++i) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&TabSpecificContentSettings::FileSystemAccessed,
@@ -1715,7 +1715,7 @@ bool ChromeContentBrowserClient::AllowWorkerIndexedDB(
const GURL& url,
const base::string16& name,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
ProfileIOData* io_data = ProfileIOData::FromResourceContext(context);
CookieSettings* cookie_settings = io_data->GetCookieSettings();
@@ -1723,7 +1723,7 @@ bool ChromeContentBrowserClient::AllowWorkerIndexedDB(
// Record access to IndexedDB for potential display in UI.
std::vector<std::pair<int, int> >::const_iterator i;
- for (i = render_views.begin(); i != render_views.end(); ++i) {
+ for (i = render_frames.begin(); i != render_frames.end(); ++i) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&TabSpecificContentSettings::IndexedDBAccessed,
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index e12eae1..28bf83d 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -138,16 +138,16 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient {
const base::string16& display_name,
unsigned long estimated_size,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) OVERRIDE;
+ const std::vector<std::pair<int, int> >& render_frames) OVERRIDE;
virtual bool AllowWorkerFileSystem(
const GURL& url,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) OVERRIDE;
+ const std::vector<std::pair<int, int> >& render_frames) OVERRIDE;
virtual bool AllowWorkerIndexedDB(
const GURL& url,
const base::string16& name,
content::ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) OVERRIDE;
+ const std::vector<std::pair<int, int> >& render_frames) OVERRIDE;
virtual net::URLRequestContext* OverrideRequestContextForURL(
const GURL& url, content::ResourceContext* context) OVERRIDE;
virtual content::QuotaPermissionContext*
diff --git a/chrome/browser/content_settings/tab_specific_content_settings.cc b/chrome/browser/content_settings/tab_specific_content_settings.cc
index d7d5edf..f605595 100644
--- a/chrome/browser/content_settings/tab_specific_content_settings.cc
+++ b/chrome/browser/content_settings/tab_specific_content_settings.cc
@@ -156,12 +156,6 @@ void TabSpecificContentSettings::WebDatabaseAccessed(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
TabSpecificContentSettings* settings = GetForFrame(
render_process_id, render_frame_id);
-
- // TODO(jam): remove this once WorkerProcessHost knows the RenderFrame IDs for
- // a shared worker, which needs SharedWorkerRepository to be per frame.
- if (!settings)
- settings = Get(render_process_id, render_frame_id);
-
if (settings)
settings->OnWebDatabaseAccessed(url, name, display_name, blocked_by_policy);
}
@@ -189,12 +183,6 @@ void TabSpecificContentSettings::IndexedDBAccessed(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
TabSpecificContentSettings* settings = GetForFrame(
render_process_id, render_frame_id);
-
- // TODO(jam): remove this once WorkerProcessHost knows the RenderFrame IDs for
- // a shared worker, which needs SharedWorkerRepository to be per frame.
- if (!settings)
- settings = Get(render_process_id, render_frame_id);
-
if (settings)
settings->OnIndexedDBAccessed(url, description, blocked_by_policy);
}
@@ -207,12 +195,6 @@ void TabSpecificContentSettings::FileSystemAccessed(int render_process_id,
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
TabSpecificContentSettings* settings = GetForFrame(
render_process_id, render_frame_id);
-
- // TODO(jam): remove this once WorkerProcessHost knows the RenderFrame IDs for
- // a shared worker, which needs SharedWorkerRepository to be per frame.
- if (!settings)
- settings = Get(render_process_id, render_frame_id);
-
if (settings)
settings->OnFileSystemAccessed(url, blocked_by_policy);
}
diff --git a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
index b9575dd..c152907 100644
--- a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
+++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
@@ -254,9 +254,6 @@ WebNavigationTabObserver::WebNavigationTabObserver(
pending_render_view_host_(NULL) {
g_tab_observer.Get().insert(TabObserverMap::value_type(web_contents, this));
registrar_.Add(this,
- content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT,
- content::Source<content::WebContents>(web_contents));
- registrar_.Add(this,
content::NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW,
content::NotificationService::AllSources());
}
@@ -288,36 +285,6 @@ void WebNavigationTabObserver::Observe(
const content::NotificationSource& source,
const content::NotificationDetails& details) {
switch (type) {
- case content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT: {
- content::ResourceRedirectDetails* resource_redirect_details =
- content::Details<content::ResourceRedirectDetails>(details).ptr();
- ResourceType::Type resource_type =
- resource_redirect_details->resource_type;
- if (resource_type == ResourceType::MAIN_FRAME ||
- resource_type == ResourceType::SUB_FRAME) {
- content::RenderViewHost* render_view_host = NULL;
- if (render_view_host_ &&
- resource_redirect_details->origin_child_id ==
- render_view_host_->GetProcess()->GetID() &&
- resource_redirect_details->origin_route_id ==
- render_view_host_->GetRoutingID()) {
- render_view_host = render_view_host_;
- } else if (pending_render_view_host_ &&
- resource_redirect_details->origin_child_id ==
- pending_render_view_host_->GetProcess()->GetID() &&
- resource_redirect_details->origin_route_id ==
- pending_render_view_host_->GetRoutingID()) {
- render_view_host = pending_render_view_host_;
- }
- if (!render_view_host)
- return;
- FrameNavigationState::FrameID frame_id(
- resource_redirect_details->frame_id, render_view_host);
- navigation_state_.SetIsServerRedirected(frame_id);
- }
- break;
- }
-
case content::NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW: {
// The RenderView is technically not yet deleted, but the RenderViewHost
// already starts to filter out some IPCs. In order to not get confused,
@@ -617,6 +584,13 @@ void WebNavigationTabObserver::DidFailLoad(
navigation_state_.SetErrorOccurredInFrame(frame_id);
}
+void WebNavigationTabObserver::DidGetRedirectForResourceRequest(
+ content::RenderViewHost* render_view_host,
+ const content::ResourceRedirectDetails& details) {
+ FrameNavigationState::FrameID frame_id(details.frame_id, render_view_host);
+ navigation_state_.SetIsServerRedirected(frame_id);
+}
+
void WebNavigationTabObserver::DidOpenRequestedURL(
content::WebContents* new_contents,
const GURL& url,
diff --git a/chrome/browser/extensions/api/web_navigation/web_navigation_api.h b/chrome/browser/extensions/api/web_navigation/web_navigation_api.h
index c0dd107..b445c34 100644
--- a/chrome/browser/extensions/api/web_navigation/web_navigation_api.h
+++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api.h
@@ -94,6 +94,9 @@ class WebNavigationTabObserver
int error_code,
const base::string16& error_description,
content::RenderViewHost* render_view_host) OVERRIDE;
+ virtual void DidGetRedirectForResourceRequest(
+ content::RenderViewHost* render_view_host,
+ const content::ResourceRedirectDetails& details) OVERRIDE;
virtual void DidOpenRequestedURL(content::WebContents* new_contents,
const GURL& url,
const content::Referrer& referrer,
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index 8332584..1f6bdba 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -618,6 +618,7 @@ void PrerenderContents::DidNavigateMainFrame(
}
void PrerenderContents::DidGetRedirectForResourceRequest(
+ RenderViewHost* render_view_host,
const content::ResourceRedirectDetails& details) {
// DidGetRedirectForResourceRequest can come for any resource on a page. If
// it's a redirect on the top-level resource, the name needs to be remembered
diff --git a/chrome/browser/prerender/prerender_contents.h b/chrome/browser/prerender/prerender_contents.h
index 0855af6..25cc3e1 100644
--- a/chrome/browser/prerender/prerender_contents.h
+++ b/chrome/browser/prerender/prerender_contents.h
@@ -234,6 +234,7 @@ class PrerenderContents : public content::NotificationObserver,
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) OVERRIDE;
virtual void DidGetRedirectForResourceRequest(
+ content::RenderViewHost* render_view_host,
const content::ResourceRedirectDetails& details) OVERRIDE;
virtual void DidUpdateFaviconURL(int32 page_id,
const std::vector<content::FaviconURL>& urls) OVERRIDE;
diff --git a/content/browser/frame_host/render_frame_host_delegate.h b/content/browser/frame_host/render_frame_host_delegate.h
index 1b9603e..b364ec5 100644
--- a/content/browser/frame_host/render_frame_host_delegate.h
+++ b/content/browser/frame_host/render_frame_host_delegate.h
@@ -29,6 +29,9 @@ class CONTENT_EXPORT RenderFrameHostDelegate {
// Informs the delegate whenever a RenderFrameHost is deleted.
virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) {}
+ // Notification that a worker process has crashed.
+ virtual void WorkerCrashed() {}
+
// Return this object cast to a WebContents, if it is one. If the object is
// not a WebContents, returns NULL.
virtual WebContents* GetAsWebContents();
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index 831a368..e860a25 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -282,7 +282,7 @@ void NotifyRedirectOnUI(int render_process_id,
return;
RenderViewHostDelegate* delegate = host->GetDelegate();
- delegate->DidGetRedirectForResourceRequest(*details.get());
+ delegate->DidGetRedirectForResourceRequest(host, *details.get());
}
void NotifyResponseOnUI(int render_process_id,
@@ -779,22 +779,6 @@ void ResourceDispatcherHostImpl::DidFinishLoading(ResourceLoader* loader) {
RemovePendingRequest(info->GetChildID(), info->GetRequestID());
}
-// static
-bool ResourceDispatcherHostImpl::RenderViewForRequest(
- const net::URLRequest* request,
- int* render_process_id,
- int* render_view_id) {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request);
- if (!info) {
- *render_process_id = -1;
- *render_view_id = -1;
- return false;
- }
-
- return info->GetAssociatedRenderView(render_process_id, render_view_id);
-}
-
void ResourceDispatcherHostImpl::OnInit() {
scheduler_.reset(new ResourceScheduler);
appcache::AppCacheInterceptor::EnsureRegistered();
diff --git a/content/browser/loader/resource_dispatcher_host_impl.h b/content/browser/loader/resource_dispatcher_host_impl.h
index 2e0253a..b6922e5 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.h
+++ b/content/browser/loader/resource_dispatcher_host_impl.h
@@ -271,14 +271,6 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
virtual void DidReceiveResponse(ResourceLoader* loader) OVERRIDE;
virtual void DidFinishLoading(ResourceLoader* loader) OVERRIDE;
- // Extracts the render view/process host's identifiers from the given request
- // and places them in the given out params (both required). If there are no
- // such IDs associated with the request (such as non-page-related requests),
- // this function will return false and both out params will be -1.
- static bool RenderViewForRequest(const net::URLRequest* request,
- int* render_process_host_id,
- int* render_view_host_id);
-
// An init helper that runs on the IO thread.
void OnInit();
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index a258c36..7b7d9a9 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -173,6 +173,7 @@ class CONTENT_EXPORT RenderViewHostDelegate {
// A redirect was received while requesting a resource.
virtual void DidGetRedirectForResourceRequest(
+ RenderViewHost* render_view_host,
const ResourceRedirectDetails& details) {}
// The RenderView was navigated to a different page.
@@ -328,9 +329,6 @@ class CONTENT_EXPORT RenderViewHostDelegate {
uint64 upload_position,
uint64 upload_size) {}
- // Notification that a worker process has crashed.
- virtual void WorkerCrashed() {}
-
// The page wants the hosting window to activate/deactivate itself (it
// called the JavaScript window.focus()/blur() method).
virtual void Activate() {}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 4d2b3b2..6d04a41 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2809,6 +2809,11 @@ void WebContentsImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) {
RenderFrameDeleted(render_frame_host));
}
+void WebContentsImpl::WorkerCrashed() {
+ if (delegate_)
+ delegate_->WorkerCrashed(this);
+}
+
WebContents* WebContentsImpl::GetAsWebContents() {
return this;
}
@@ -2945,11 +2950,14 @@ void WebContentsImpl::DidGetResourceResponseStart(
}
void WebContentsImpl::DidGetRedirectForResourceRequest(
+ RenderViewHost* render_view_host,
const ResourceRedirectDetails& details) {
controller_.ssl_manager()->DidReceiveResourceRedirect(details);
- FOR_EACH_OBSERVER(WebContentsObserver, observers_,
- DidGetRedirectForResourceRequest(details));
+ FOR_EACH_OBSERVER(
+ WebContentsObserver,
+ observers_,
+ DidGetRedirectForResourceRequest(render_view_host, details));
// TODO(avi): Remove. http://crbug.com/170921
NotificationService::current()->Notify(
@@ -3581,11 +3589,6 @@ void WebContentsImpl::LoadStateChanged(
}
}
-void WebContentsImpl::WorkerCrashed() {
- if (delegate_)
- delegate_->WorkerCrashed(this);
-}
-
void WebContentsImpl::BeforeUnloadFiredFromRenderManager(
bool proceed, const base::TimeTicks& proceed_time,
bool* proceed_to_fire_unload) {
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index c60b0f7..a87c20bf 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -287,6 +287,7 @@ class CONTENT_EXPORT WebContentsImpl
const IPC::Message& message) OVERRIDE;
virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE;
+ virtual void WorkerCrashed() OVERRIDE;
virtual WebContents* GetAsWebContents() OVERRIDE;
// RenderViewHostDelegate ----------------------------------------------------
@@ -320,6 +321,7 @@ class CONTENT_EXPORT WebContentsImpl
virtual void DidGetResourceResponseStart(
const ResourceRequestDetails& details) OVERRIDE;
virtual void DidGetRedirectForResourceRequest(
+ RenderViewHost* render_view_host,
const ResourceRedirectDetails& details) OVERRIDE;
virtual void DidNavigate(
RenderViewHost* render_view_host,
@@ -397,7 +399,6 @@ class CONTENT_EXPORT WebContentsImpl
const net::LoadStateWithParam& load_state,
uint64 upload_position,
uint64 upload_size) OVERRIDE;
- virtual void WorkerCrashed() OVERRIDE;
virtual void Activate() OVERRIDE;
virtual void Deactivate() OVERRIDE;
virtual void LostCapture() OVERRIDE;
diff --git a/content/browser/worker_host/test/worker_browsertest.cc b/content/browser/worker_host/test/worker_browsertest.cc
index acd00fb..f895fb7 100644
--- a/content/browser/worker_host/test/worker_browsertest.cc
+++ b/content/browser/worker_host/test/worker_browsertest.cc
@@ -148,7 +148,7 @@ IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_LimitPerPage) {
#else
IN_PROC_BROWSER_TEST_F(WorkerTest, LimitPerPage) {
#endif
- int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
+ int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerFrameWhenSeparate;
std::string query = base::StringPrintf("?count=%d", max_workers_per_tab + 1);
GURL url = GetTestURL("many_shared_workers.html", query);
@@ -170,7 +170,7 @@ IN_PROC_BROWSER_TEST_F(WorkerTest, LimitTotal) {
return;
}
- int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
+ int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerFrameWhenSeparate;
int total_workers = WorkerServiceImpl::kMaxWorkersWhenSeparate;
std::string query = base::StringPrintf("?count=%d", max_workers_per_tab);
@@ -208,7 +208,7 @@ IN_PROC_BROWSER_TEST_F(WorkerTest, WorkerClose) {
IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_QueuedSharedWorkerShutdown) {
// Tests to make sure that queued shared workers are started up when shared
// workers shut down.
- int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
+ int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerFrameWhenSeparate;
std::string query = base::StringPrintf("?count=%d", max_workers_per_tab);
RunTest("queued_shared_worker_shutdown.html", query);
ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab));
@@ -220,7 +220,7 @@ IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_QueuedSharedWorkerShutdown) {
IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_MultipleTabsQueuedSharedWorker) {
// Tests to make sure that only one instance of queued shared workers are
// started up even when those instances are on multiple tabs.
- int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
+ int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerFrameWhenSeparate;
std::string query = base::StringPrintf("?count=%d", max_workers_per_tab + 1);
GURL url = GetTestURL("many_shared_workers.html", query);
NavigateToURL(shell(), url);
@@ -243,7 +243,7 @@ IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_MultipleTabsQueuedSharedWorker) {
IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_QueuedSharedWorkerStartedFromOtherTab) {
// Tests to make sure that queued shared workers are started up when
// an instance is launched from another tab.
- int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
+ int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerFrameWhenSeparate;
std::string query = base::StringPrintf("?count=%d", max_workers_per_tab + 1);
GURL url = GetTestURL("many_shared_workers.html", query);
NavigateToURL(shell(), url);
diff --git a/content/browser/worker_host/worker_document_set.cc b/content/browser/worker_host/worker_document_set.cc
index 48eaf86..3295b94 100644
--- a/content/browser/worker_host/worker_document_set.cc
+++ b/content/browser/worker_host/worker_document_set.cc
@@ -14,8 +14,10 @@ WorkerDocumentSet::WorkerDocumentSet() {
void WorkerDocumentSet::Add(WorkerMessageFilter* parent,
unsigned long long document_id,
int render_process_id,
- int render_view_id) {
- DocumentInfo info(parent, document_id, render_process_id, render_view_id);
+ int render_view_id,
+ int render_frame_id) {
+ DocumentInfo info(parent, document_id, render_process_id, render_view_id,
+ render_frame_id);
document_set_.insert(info);
}
@@ -60,11 +62,12 @@ void WorkerDocumentSet::RemoveAll(WorkerMessageFilter* parent) {
WorkerDocumentSet::DocumentInfo::DocumentInfo(
WorkerMessageFilter* filter, unsigned long long document_id,
- int render_process_id, int render_view_id)
+ int render_process_id, int render_view_id, int render_frame_id)
: filter_(filter),
document_id_(document_id),
render_process_id_(render_process_id),
- render_view_id_(render_view_id) {
+ render_view_id_(render_view_id),
+ render_frame_id_(render_frame_id) {
}
WorkerDocumentSet::~WorkerDocumentSet() {
diff --git a/content/browser/worker_host/worker_document_set.h b/content/browser/worker_host/worker_document_set.h
index a4b35ae..97047e4 100644
--- a/content/browser/worker_host/worker_document_set.h
+++ b/content/browser/worker_host/worker_document_set.h
@@ -25,11 +25,13 @@ class WorkerDocumentSet : public base::RefCounted<WorkerDocumentSet> {
class DocumentInfo {
public:
DocumentInfo(WorkerMessageFilter* filter, unsigned long long document_id,
- int renderer_process_id, int render_view_id);
+ int renderer_process_id, int render_view_id,
+ int render_frame_id);
WorkerMessageFilter* filter() const { return filter_; }
unsigned long long document_id() const { return document_id_; }
int render_process_id() const { return render_process_id_; }
int render_view_id() const { return render_view_id_; }
+ int render_frame_id() const { return render_frame_id_; }
// Define operator "<", which is used to determine uniqueness within
// the set.
@@ -50,6 +52,7 @@ class WorkerDocumentSet : public base::RefCounted<WorkerDocumentSet> {
unsigned long long document_id_;
int render_process_id_;
int render_view_id_;
+ int render_frame_id_;
};
// Adds a document to a shared worker's document set. Also includes the
@@ -58,7 +61,8 @@ class WorkerDocumentSet : public base::RefCounted<WorkerDocumentSet> {
void Add(WorkerMessageFilter* parent,
unsigned long long document_id,
int render_process_id,
- int render_view_id);
+ int render_view_id,
+ int render_frame_id);
// Checks to see if a document is in a shared worker's document set.
bool Contains(WorkerMessageFilter* parent,
diff --git a/content/browser/worker_host/worker_process_host.cc b/content/browser/worker_host/worker_process_host.cc
index fae589b..2707ab6 100644
--- a/content/browser/worker_host/worker_process_host.cc
+++ b/content/browser/worker_host/worker_process_host.cc
@@ -23,6 +23,8 @@
#include "content/browser/devtools/worker_devtools_manager.h"
#include "content/browser/devtools/worker_devtools_message_filter.h"
#include "content/browser/fileapi/fileapi_message_filter.h"
+#include "content/browser/frame_host/render_frame_host_delegate.h"
+#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
#include "content/browser/loader/resource_message_filter.h"
#include "content/browser/message_port_message_filter.h"
@@ -80,11 +82,11 @@ class WorkerSandboxedProcessLauncherDelegate
} // namespace
// Notifies RenderViewHost that one or more worker objects crashed.
-void WorkerCrashCallback(int render_process_unique_id, int render_view_id) {
- RenderViewHostImpl* host =
- RenderViewHostImpl::FromID(render_process_unique_id, render_view_id);
+void WorkerCrashCallback(int render_process_unique_id, int render_frame_id) {
+ RenderFrameHostImpl* host =
+ RenderFrameHostImpl::FromID(render_process_unique_id, render_frame_id);
if (host)
- host->GetDelegate()->WorkerCrashed();
+ host->delegate()->WorkerCrashed();
}
WorkerProcessHost::WorkerProcessHost(
@@ -109,7 +111,7 @@ WorkerProcessHost::~WorkerProcessHost() {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&WorkerCrashCallback, parent_iter->render_process_id(),
- parent_iter->render_view_id()));
+ parent_iter->render_frame_id()));
}
WorkerServiceImpl::GetInstance()->NotifyWorkerDestroyed(
this, i->worker_route_id());
@@ -378,14 +380,14 @@ void WorkerProcessHost::OnAllowDatabase(int worker_route_id,
bool* result) {
*result = GetContentClient()->browser()->AllowWorkerDatabase(
url, name, display_name, estimated_size, resource_context_,
- GetRenderViewIDsForWorker(worker_route_id));
+ GetRenderFrameIDsForWorker(worker_route_id));
}
void WorkerProcessHost::OnAllowFileSystem(int worker_route_id,
const GURL& url,
bool* result) {
*result = GetContentClient()->browser()->AllowWorkerFileSystem(
- url, resource_context_, GetRenderViewIDsForWorker(worker_route_id));
+ url, resource_context_, GetRenderFrameIDsForWorker(worker_route_id));
}
void WorkerProcessHost::OnAllowIndexedDB(int worker_route_id,
@@ -393,7 +395,8 @@ void WorkerProcessHost::OnAllowIndexedDB(int worker_route_id,
const base::string16& name,
bool* result) {
*result = GetContentClient()->browser()->AllowWorkerIndexedDB(
- url, name, resource_context_, GetRenderViewIDsForWorker(worker_route_id));
+ url, name, resource_context_,
+ GetRenderFrameIDsForWorker(worker_route_id));
}
void WorkerProcessHost::OnForceKillWorkerProcess() {
@@ -539,7 +542,7 @@ const ChildProcessData& WorkerProcessHost::GetData() {
return process_->GetData();
}
-std::vector<std::pair<int, int> > WorkerProcessHost::GetRenderViewIDsForWorker(
+std::vector<std::pair<int, int> > WorkerProcessHost::GetRenderFrameIDsForWorker(
int worker_route_id) {
std::vector<std::pair<int, int> > result;
WorkerProcessHost::Instances::const_iterator i;
@@ -551,7 +554,7 @@ std::vector<std::pair<int, int> > WorkerProcessHost::GetRenderViewIDsForWorker(
for (WorkerDocumentSet::DocumentInfoSet::const_iterator doc =
documents.begin(); doc != documents.end(); ++doc) {
result.push_back(
- std::make_pair(doc->render_process_id(), doc->render_view_id()));
+ std::make_pair(doc->render_process_id(), doc->render_frame_id()));
}
break;
}
@@ -685,15 +688,15 @@ bool WorkerProcessHost::WorkerInstance::HasFilter(
return false;
}
-bool WorkerProcessHost::WorkerInstance::RendererIsParent(
- int render_process_id, int render_view_id) const {
+bool WorkerProcessHost::WorkerInstance::FrameIsParent(
+ int render_process_id, int render_frame_id) const {
const WorkerDocumentSet::DocumentInfoSet& parents =
worker_document_set()->documents();
for (WorkerDocumentSet::DocumentInfoSet::const_iterator parent_iter =
parents.begin();
parent_iter != parents.end(); ++parent_iter) {
if (parent_iter->render_process_id() == render_process_id &&
- parent_iter->render_view_id() == render_view_id) {
+ parent_iter->render_frame_id() == render_frame_id) {
return true;
}
}
diff --git a/content/browser/worker_host/worker_process_host.h b/content/browser/worker_host/worker_process_host.h
index c3fa64d..e0c0ef2 100644
--- a/content/browser/worker_host/worker_process_host.h
+++ b/content/browser/worker_host/worker_process_host.h
@@ -79,7 +79,7 @@ class WorkerProcessHost : public BrowserChildProcessHostDelegate,
void RemoveFilter(WorkerMessageFilter* filter, int route_id);
void RemoveFilters(WorkerMessageFilter* filter);
bool HasFilter(WorkerMessageFilter* filter, int route_id) const;
- bool RendererIsParent(int render_process_id, int render_view_id) const;
+ bool FrameIsParent(int render_process_id, int render_frame_id) const;
int NumFilters() const { return filters_.size(); }
// Returns the single filter (must only be one).
FilterInfo GetFilter() const;
@@ -222,9 +222,9 @@ class WorkerProcessHost : public BrowserChildProcessHostDelegate,
// Updates the title shown in the task manager.
void UpdateTitle();
- // Return a vector of all the render process/render view IDs that use the
+ // Return a vector of all the render process/render frame IDs that use the
// given worker.
- std::vector<std::pair<int, int> > GetRenderViewIDsForWorker(int route_id);
+ std::vector<std::pair<int, int> > GetRenderFrameIDsForWorker(int route_id);
// Callbacks for ResourceMessageFilter and SocketStreamDispatcherHost.
void GetContexts(const ResourceHostMsg_Request& request,
diff --git a/content/browser/worker_host/worker_service_impl.cc b/content/browser/worker_host/worker_service_impl.cc
index 3ebab46..03c4fb9 100644
--- a/content/browser/worker_host/worker_service_impl.cc
+++ b/content/browser/worker_host/worker_service_impl.cc
@@ -18,6 +18,7 @@
#include "content/public/browser/child_process_data.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
@@ -31,8 +32,17 @@
namespace content {
+namespace {
+void AddRenderFrameID(std::set<std::pair<int, int> >* visible_frame_ids,
+ RenderFrameHost* rfh) {
+ visible_frame_ids->insert(
+ std::pair<int, int>(rfh->GetProcess()->GetID(),
+ rfh->GetRoutingID()));
+}
+}
+
const int WorkerServiceImpl::kMaxWorkersWhenSeparate = 64;
-const int WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate = 16;
+const int WorkerServiceImpl::kMaxWorkersPerFrameWhenSeparate = 16;
class WorkerPrioritySetter
: public NotificationObserver,
@@ -64,8 +74,8 @@ class WorkerPrioritySetter
// widgets being shown.
void RegisterObserver();
- // Sets priorities for shared workers given a set of visible tabs (as a
- // std::set of std::pair<render_process, render_view> ids.
+ // Sets priorities for shared workers given a set of visible frames (as a
+ // std::set of std::pair<render_process, render_frame> ids.
void UpdateWorkerPrioritiesFromVisibleSet(
const std::set<std::pair<int, int> >* visible);
@@ -107,7 +117,7 @@ void WorkerPrioritySetter::PostTaskToGatherAndUpdateWorkerPriorities() {
void WorkerPrioritySetter::GatherVisibleIDsAndUpdateWorkerPriorities() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- std::set<std::pair<int, int> >* visible_renderer_ids =
+ std::set<std::pair<int, int> >* visible_frame_ids =
new std::set<std::pair<int, int> >();
// Gather up all the visible renderer process/view pairs
@@ -116,23 +126,28 @@ void WorkerPrioritySetter::GatherVisibleIDsAndUpdateWorkerPriorities() {
while (RenderWidgetHost* widget = widgets->GetNextHost()) {
if (widget->GetProcess()->VisibleWidgetCount() == 0)
continue;
+ if (!widget->IsRenderView())
+ continue;
- RenderWidgetHostView* render_view = widget->GetView();
- if (render_view && render_view->IsShowing()) {
- visible_renderer_ids->insert(
- std::pair<int, int>(widget->GetProcess()->GetID(),
- widget->GetRoutingID()));
- }
+ RenderWidgetHostView* widget_view = widget->GetView();
+ if (!widget_view || !widget_view->IsShowing())
+ continue;
+ RenderViewHost* rvh = RenderViewHost::From(widget);
+ WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
+ if (!web_contents)
+ continue;
+ web_contents->ForEachFrame(
+ base::Bind(&AddRenderFrameID, visible_frame_ids));
}
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&WorkerPrioritySetter::UpdateWorkerPrioritiesFromVisibleSet,
- this, base::Owned(visible_renderer_ids)));
+ this, base::Owned(visible_frame_ids)));
}
void WorkerPrioritySetter::UpdateWorkerPrioritiesFromVisibleSet(
- const std::set<std::pair<int, int> >* visible_renderer_ids) {
+ const std::set<std::pair<int, int> >* visible_frame_ids) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) {
@@ -156,8 +171,8 @@ void WorkerPrioritySetter::UpdateWorkerPrioritiesFromVisibleSet(
for (; info != first_instance->worker_document_set()->documents().end();
++info) {
std::pair<int, int> id(
- info->render_process_id(), info->render_view_id());
- if (visible_renderer_ids->find(id) != visible_renderer_ids->end()) {
+ info->render_process_id(), info->render_frame_id());
+ if (visible_frame_ids->find(id) != visible_frame_ids->end()) {
throttle = false;
break;
}
@@ -175,11 +190,11 @@ void WorkerPrioritySetter::UpdateWorkerPrioritiesFromVisibleSet(
void WorkerPrioritySetter::OnRenderWidgetVisibilityChanged(
std::pair<int, int> id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- std::set<std::pair<int, int> > visible_renderer_ids;
+ std::set<std::pair<int, int> > visible_frame_ids;
- visible_renderer_ids.insert(id);
+ visible_frame_ids.insert(id);
- UpdateWorkerPrioritiesFromVisibleSet(&visible_renderer_ids);
+ UpdateWorkerPrioritiesFromVisibleSet(&visible_frame_ids);
}
void WorkerPrioritySetter::RegisterObserver() {
@@ -305,7 +320,7 @@ void WorkerServiceImpl::CreateWorker(
instance.AddFilter(filter, route_id);
instance.worker_document_set()->Add(
filter, params.document_id, filter->render_process_id(),
- params.render_view_route_id);
+ params.render_view_route_id, params.render_frame_route_id);
CreateWorkerFromInstance(instance);
}
@@ -350,7 +365,7 @@ void WorkerServiceImpl::LookupSharedWorker(
// worker's document set for nested workers.
instance->worker_document_set()->Add(
filter, params.document_id, filter->render_process_id(),
- params.render_view_route_id);
+ params.render_view_route_id, params.render_frame_route_id);
}
}
@@ -497,9 +512,9 @@ bool WorkerServiceImpl::CanCreateWorkerProcess(
parents.begin();
parent_iter != parents.end(); ++parent_iter) {
bool hit_total_worker_limit = false;
- if (TabCanCreateWorkerProcess(parent_iter->render_process_id(),
- parent_iter->render_view_id(),
- &hit_total_worker_limit)) {
+ if (FrameCanCreateWorkerProcess(parent_iter->render_process_id(),
+ parent_iter->render_frame_id(),
+ &hit_total_worker_limit)) {
return true;
}
// Return false if already at the global worker limit (no need to continue
@@ -512,9 +527,9 @@ bool WorkerServiceImpl::CanCreateWorkerProcess(
return false;
}
-bool WorkerServiceImpl::TabCanCreateWorkerProcess(
+bool WorkerServiceImpl::FrameCanCreateWorkerProcess(
int render_process_id,
- int render_view_id,
+ int render_frame_id,
bool* hit_total_worker_limit) {
int total_workers = 0;
int workers_per_tab = 0;
@@ -528,9 +543,9 @@ bool WorkerServiceImpl::TabCanCreateWorkerProcess(
*hit_total_worker_limit = true;
return false;
}
- if (cur_instance->RendererIsParent(render_process_id, render_view_id)) {
+ if (cur_instance->FrameIsParent(render_process_id, render_frame_id)) {
workers_per_tab++;
- if (workers_per_tab >= kMaxWorkersPerTabWhenSeparate)
+ if (workers_per_tab >= kMaxWorkersPerFrameWhenSeparate)
return false;
}
}
diff --git a/content/browser/worker_host/worker_service_impl.h b/content/browser/worker_host/worker_service_impl.h
index 4d5127a..de5c462 100644
--- a/content/browser/worker_host/worker_service_impl.h
+++ b/content/browser/worker_host/worker_service_impl.h
@@ -80,7 +80,7 @@ class CONTENT_EXPORT WorkerServiceImpl
// Used when we run each worker in a separate process.
static const int kMaxWorkersWhenSeparate;
- static const int kMaxWorkersPerTabWhenSeparate;
+ static const int kMaxWorkersPerFrameWhenSeparate;
private:
friend struct DefaultSingletonTraits<WorkerServiceImpl>;
@@ -96,11 +96,11 @@ class CONTENT_EXPORT WorkerServiceImpl
bool CanCreateWorkerProcess(
const WorkerProcessHost::WorkerInstance& instance);
- // Checks if the tab associated with the passed RenderView can create a
+ // Checks if the frame associated with the passed RenderFrame can create a
// worker process based on the process limit when we're using a strategy of
// one worker per process.
- bool TabCanCreateWorkerProcess(
- int render_process_id, int render_route_id, bool* hit_total_worker_limit);
+ bool FrameCanCreateWorkerProcess(
+ int render_process_id, int render_frame_id, bool* hit_total_worker_limit);
// Tries to see if any of the queued workers can be created.
void TryStartingQueuedWorker();
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 672acb9..3fe538f 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -391,9 +391,12 @@ IPC_STRUCT_BEGIN(ViewHostMsg_CreateWorker_Params)
// The ID of the parent document (unique within parent renderer).
IPC_STRUCT_MEMBER(unsigned long long, document_id)
- // RenderView routing id used to send messages back to the parent.
+ // RenderView routing id.
IPC_STRUCT_MEMBER(int, render_view_route_id)
+ // RenderFrame routing id used to send messages back to the parent.
+ IPC_STRUCT_MEMBER(int, render_frame_route_id)
+
// The route ID to associate with the worker. If MSG_ROUTING_NONE is passed,
// a new unique ID is created and assigned to the worker.
IPC_STRUCT_MEMBER(int, route_id)
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index acb9fe8..a55412d 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -145,14 +145,14 @@ bool ContentBrowserClient::AllowWorkerDatabase(
const base::string16& display_name,
unsigned long estimated_size,
ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
return true;
}
bool ContentBrowserClient::AllowWorkerFileSystem(
const GURL& url,
ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
return true;
}
@@ -160,7 +160,7 @@ bool ContentBrowserClient::AllowWorkerIndexedDB(
const GURL& url,
const base::string16& name,
ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views) {
+ const std::vector<std::pair<int, int> >& render_frames) {
return true;
}
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index 8633105..9cab888 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -306,8 +306,8 @@ class CONTENT_EXPORT ContentBrowserClient {
virtual bool AllowSaveLocalState(ResourceContext* context);
// Allow the embedder to control if access to web database by a shared worker
- // is allowed. |render_views| is a vector of pairs of
- // RenderProcessID/RenderViewID of RenderViews that are using this worker.
+ // is allowed. |render_frame| is a vector of pairs of
+ // RenderProcessID/RenderFrameID of RenderFrame that are using this worker.
// This is called on the IO thread.
virtual bool AllowWorkerDatabase(
const GURL& url,
@@ -315,7 +315,7 @@ class CONTENT_EXPORT ContentBrowserClient {
const base::string16& display_name,
unsigned long estimated_size,
ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views);
+ const std::vector<std::pair<int, int> >& render_frames);
// Allow the embedder to control if access to file system by a shared worker
// is allowed.
@@ -323,7 +323,7 @@ class CONTENT_EXPORT ContentBrowserClient {
virtual bool AllowWorkerFileSystem(
const GURL& url,
ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views);
+ const std::vector<std::pair<int, int> >& render_frames);
// Allow the embedder to control if access to IndexedDB by a shared worker
// is allowed.
@@ -332,7 +332,7 @@ class CONTENT_EXPORT ContentBrowserClient {
const GURL& url,
const base::string16& name,
ResourceContext* context,
- const std::vector<std::pair<int, int> >& render_views);
+ const std::vector<std::pair<int, int> >& render_frames);
// Allow the embedder to override the request context based on the URL for
// certain operations, like cookie access. Returns NULL to indicate the
diff --git a/content/public/browser/resource_request_details.cc b/content/public/browser/resource_request_details.cc
index 7b92c84..06badaf 100644
--- a/content/public/browser/resource_request_details.cc
+++ b/content/public/browser/resource_request_details.cc
@@ -33,10 +33,10 @@ ResourceRequestDetails::ResourceRequestDetails(const net::URLRequest* request,
// of ssl state change (http://crbug.com/25357). For now, just notify
// the first one (works for dedicated workers and shared workers with
// a single process).
+ int render_frame_id;
if (!WorkerServiceImpl::GetInstance()->GetRendererForWorker(
- info->GetChildID(), &origin_child_id, &origin_route_id)) {
+ info->GetChildID(), &origin_child_id, &render_frame_id)) {
origin_child_id = info->GetChildID();
- origin_route_id = info->GetRouteID();
}
}
diff --git a/content/public/browser/resource_request_details.h b/content/public/browser/resource_request_details.h
index 1c20557..a55febd 100644
--- a/content/public/browser/resource_request_details.h
+++ b/content/public/browser/resource_request_details.h
@@ -34,7 +34,6 @@ struct ResourceRequestDetails {
bool has_upload;
int load_flags;
int origin_child_id;
- int origin_route_id;
net::URLRequestStatus status;
int ssl_cert_id;
net::CertStatus ssl_cert_status;
diff --git a/content/public/browser/web_contents_observer.h b/content/public/browser/web_contents_observer.h
index 10d5e3e..5a2c1f7 100644
--- a/content/public/browser/web_contents_observer.h
+++ b/content/public/browser/web_contents_observer.h
@@ -209,6 +209,7 @@ class CONTENT_EXPORT WebContentsObserver : public IPC::Listener,
// This method is invoked when a redirect was received while requesting a
// resource.
virtual void DidGetRedirectForResourceRequest(
+ RenderViewHost* render_view_host,
const ResourceRedirectDetails& details) {}
// This method is invoked when a new non-pending navigation entry is created.
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index e8212f8..0fd1953 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -36,6 +36,7 @@
#include "content/renderer/render_view_impl.h"
#include "content/renderer/render_widget_fullscreen_pepper.h"
#include "content/renderer/renderer_webapplicationcachehost_impl.h"
+#include "content/renderer/shared_worker_repository.h"
#include "content/renderer/websharedworker_proxy.h"
#include "net/base/net_errors.h"
#include "net/http/http_util.h"
@@ -130,6 +131,7 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
#if defined(ENABLE_PLUGINS)
new PepperBrowserConnection(this);
#endif
+ new SharedWorkerRepository(this);
GetContentClient()->renderer()->RenderFrameCreated(this);
}
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 041b506..3ccf69a 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -117,7 +117,6 @@
#include "content/renderer/renderer_webcolorchooser_impl.h"
#include "content/renderer/resizing_mode_selector.h"
#include "content/renderer/savable_resources.h"
-#include "content/renderer/shared_worker_repository.h"
#include "content/renderer/speech_recognition_dispatcher.h"
#include "content/renderer/stats_collection_controller.h"
#include "content/renderer/stats_collection_observer.h"
@@ -977,8 +976,6 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
new TextInputClientObserver(this);
#endif // defined(OS_MACOSX)
- new SharedWorkerRepository(this);
-
#if defined(OS_ANDROID)
media_player_manager_ = new RendererMediaPlayerManager(this);
new JavaBridgeDispatcher(this);
diff --git a/content/renderer/shared_worker_repository.cc b/content/renderer/shared_worker_repository.cc
index 1ccc9e8..a35e767 100644
--- a/content/renderer/shared_worker_repository.cc
+++ b/content/renderer/shared_worker_repository.cc
@@ -6,19 +6,23 @@
#include "content/child/child_thread.h"
#include "content/common/view_messages.h"
+#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_view_impl.h"
#include "content/renderer/websharedworker_proxy.h"
-#include "third_party/WebKit/public/web/WebView.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
namespace content {
-SharedWorkerRepository::SharedWorkerRepository(RenderViewImpl* render_view)
- : RenderViewObserver(render_view) {
- render_view->GetWebView()->setSharedWorkerRepositoryClient(this);
+SharedWorkerRepository::SharedWorkerRepository(RenderFrameImpl* render_frame)
+ : RenderFrameObserver(render_frame) {
}
SharedWorkerRepository::~SharedWorkerRepository() {}
+void SharedWorkerRepository::WebFrameCreated(blink::WebFrame* frame) {
+ frame->setSharedWorkerRepositoryClient(this);
+}
+
blink::WebSharedWorkerConnector*
SharedWorkerRepository::createSharedWorkerConnector(
const blink::WebURL& url,
@@ -31,7 +35,8 @@ SharedWorkerRepository::createSharedWorkerConnector(
params.url = url;
params.name = name;
params.document_id = document_id;
- params.render_view_route_id = render_view()->GetRoutingID();
+ params.render_view_route_id = render_frame()->GetRenderView()->GetRoutingID();
+ params.render_frame_route_id = render_frame()->GetRoutingID();
params.route_id = MSG_ROUTING_NONE;
params.script_resource_appcache_id = 0;
Send(new ViewHostMsg_LookupSharedWorker(
@@ -43,7 +48,8 @@ SharedWorkerRepository::createSharedWorkerConnector(
document_id,
exists,
route_id,
- render_view()->GetRoutingID());
+ params.render_view_route_id,
+ params.render_frame_route_id);
}
void SharedWorkerRepository::documentDetached(DocumentID document) {
diff --git a/content/renderer/shared_worker_repository.h b/content/renderer/shared_worker_repository.h
index ce3b53c..1263e8c 100644
--- a/content/renderer/shared_worker_repository.h
+++ b/content/renderer/shared_worker_repository.h
@@ -8,19 +8,22 @@
#include <set>
#include "base/basictypes.h"
-#include "content/public/renderer/render_view_observer.h"
+#include "content/public/renderer/render_frame_observer.h"
#include "third_party/WebKit/public/web/WebSharedWorkerRepositoryClient.h"
namespace content {
-class RenderViewImpl;
+class RenderFrameImpl;
-class SharedWorkerRepository : public RenderViewObserver,
+class SharedWorkerRepository : public RenderFrameObserver,
public blink::WebSharedWorkerRepositoryClient {
public:
- explicit SharedWorkerRepository(RenderViewImpl* render_view);
+ explicit SharedWorkerRepository(RenderFrameImpl* render_frame);
virtual ~SharedWorkerRepository();
+ // RenderFrameObserver overrides.
+ virtual void WebFrameCreated(blink::WebFrame* frame) OVERRIDE;
+
// WebSharedWorkerRepositoryClient overrides.
virtual blink::WebSharedWorkerConnector* createSharedWorkerConnector(
const blink::WebURL& url,
diff --git a/content/renderer/websharedworker_proxy.cc b/content/renderer/websharedworker_proxy.cc
index 815568e..b796e60 100644
--- a/content/renderer/websharedworker_proxy.cc
+++ b/content/renderer/websharedworker_proxy.cc
@@ -17,9 +17,11 @@ WebSharedWorkerProxy::WebSharedWorkerProxy(ChildThread* child_thread,
unsigned long long document_id,
bool exists,
int route_id,
- int render_view_route_id)
+ int render_view_route_id,
+ int render_frame_route_id)
: route_id_(exists ? route_id : MSG_ROUTING_NONE),
render_view_route_id_(render_view_route_id),
+ render_frame_route_id_(render_frame_route_id),
child_thread_(child_thread),
document_id_(document_id),
pending_route_id_(route_id),
@@ -64,6 +66,7 @@ void WebSharedWorkerProxy::CreateWorkerContext(
params.name = name;
params.document_id = document_id_;
params.render_view_route_id = render_view_route_id_;
+ params.render_frame_route_id = render_frame_route_id_;
params.route_id = pending_route_id;
params.script_resource_appcache_id = script_resource_appcache_id;
IPC::Message* create_message = new ViewHostMsg_CreateWorker(
diff --git a/content/renderer/websharedworker_proxy.h b/content/renderer/websharedworker_proxy.h
index a7335b3..d0bcc0a 100644
--- a/content/renderer/websharedworker_proxy.h
+++ b/content/renderer/websharedworker_proxy.h
@@ -31,7 +31,8 @@ class WebSharedWorkerProxy : public blink::WebSharedWorkerConnector,
unsigned long long document_id,
bool exists,
int route_id,
- int render_view_route_id);
+ int render_view_route_id,
+ int render_frame_route_id);
virtual ~WebSharedWorkerProxy();
// Implementations of WebSharedWorker APIs
@@ -86,8 +87,9 @@ class WebSharedWorkerProxy : public blink::WebSharedWorkerConnector,
// routing ids).
int route_id_;
- // The routing id for the RenderView that created this worker.
+ // The routing id for the RenderView and RenderFrame that created this worker.
int render_view_route_id_;
+ int render_frame_route_id_;
ChildThread* child_thread_;