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 c5f9b16ef4a6d94b5beac935992e2af8a2e0875f..9d63ab3da35e84b465ba1759be8663e89e880930 100644 |
--- a/content/browser/service_worker/service_worker_provider_host.cc |
+++ b/content/browser/service_worker/service_worker_provider_host.cc |
@@ -5,6 +5,7 @@ |
#include "content/browser/service_worker/service_worker_provider_host.h" |
#include "base/stl_util.h" |
+#include "content/browser/frame_host/render_frame_host_impl.h" |
#include "content/browser/message_port_message_filter.h" |
#include "content/browser/service_worker/service_worker_context_core.h" |
#include "content/browser/service_worker/service_worker_context_request_handler.h" |
@@ -43,6 +44,32 @@ void FocusOnUIThread(int render_process_id, |
base::Bind(callback, result)); |
} |
+void GetClientInfoOnUIThread( |
+ int render_process_id, |
+ int render_frame_id, |
+ const ServiceWorkerProviderHost::GetClientInfoCallback& callback) { |
+ RenderFrameHostImpl* render_frame_host = |
+ RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
+ if (!render_frame_host) { |
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
+ base::Bind(callback, ServiceWorkerClientInfo())); |
+ return; |
+ } |
+ |
+ // TODO(mlamouri,michaeln): it is possible to end up collecting information |
+ // for a frame that is actually being navigated and isn't exactly what we are |
+ // expecting. |
+ ServiceWorkerClientInfo client_info( |
+ render_frame_host->GetVisibilityState(), |
+ render_frame_host->IsFocused(), |
+ render_frame_host->GetLastCommittedURL(), |
+ render_frame_host->GetParent() ? REQUEST_CONTEXT_FRAME_TYPE_NESTED |
+ : REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); |
+ |
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
+ base::Bind(callback, client_info)); |
+} |
+ |
} // anonymous namespace |
ServiceWorkerProviderHost::ServiceWorkerProviderHost( |
@@ -270,10 +297,12 @@ void ServiceWorkerProviderHost::Focus(const FocusCallback& callback) { |
} |
void ServiceWorkerProviderHost::GetClientInfo( |
- int embedded_worker_id, |
- int request_id) { |
- Send(new ServiceWorkerMsg_GetClientInfo( |
- kDocumentMainThreadId, embedded_worker_id, request_id, provider_id())); |
+ const GetClientInfoCallback& callback) { |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
+ base::Bind(&GetClientInfoOnUIThread, |
+ render_process_id_, |
+ render_frame_id_, |
+ callback)); |
} |
void ServiceWorkerProviderHost::AddScopedProcessReferenceToPattern( |