Index: content/browser/service_worker/service_worker_provider_host.cc |
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc |
index 878aa2a933cbc1861b365e5929479795d753ebab..a8f77f51b40fb287715e26c4a4c534a4fb2459a2 100644 |
--- a/content/browser/service_worker/service_worker_provider_host.cc |
+++ b/content/browser/service_worker/service_worker_provider_host.cc |
@@ -56,6 +56,21 @@ ServiceWorkerClientInfo FocusOnUIThread(int render_process_id, |
render_frame_id); |
} |
+ServiceWorkerClientInfo NavigateOnUIThread(const GURL& url, |
+ int render_process_id, |
+ int render_frame_id) { |
+ RenderFrameHostImpl* render_frame_host = |
+ RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
+ |
+ if (!render_frame_host) |
+ return ServiceWorkerClientInfo(); |
+ |
+ render_frame_host->NavigateToURL(url); |
+ |
+ return ServiceWorkerProviderHost::GetWindowClientInfoOnUI(render_process_id, |
+ render_frame_id); |
+} |
+ |
} // anonymous namespace |
ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback( |
@@ -400,6 +415,19 @@ void ServiceWorkerProviderHost::Focus(const GetClientInfoCallback& callback) { |
base::Bind(&FocusOnUIThread, render_process_id_, route_id_), callback); |
} |
+void ServiceWorkerProviderHost::Navigate( |
+ const GURL& url, |
+ const GetClientInfoCallback& callback) { |
+ if (provider_type_ != SERVICE_WORKER_PROVIDER_FOR_WINDOW) { |
+ callback.Run(ServiceWorkerClientInfo()); |
+ return; |
+ } |
+ BrowserThread::PostTaskAndReplyWithResult( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&NavigateOnUIThread, url, render_process_id_, route_id_), |
+ callback); |
+} |
+ |
void ServiceWorkerProviderHost::GetWindowClientInfo( |
const GetClientInfoCallback& callback) const { |
if (provider_type_ != SERVICE_WORKER_PROVIDER_FOR_WINDOW) { |