diff options
Diffstat (limited to 'chromium/content/browser/service_worker/service_worker_client_utils.cc')
-rw-r--r-- | chromium/content/browser/service_worker/service_worker_client_utils.cc | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/chromium/content/browser/service_worker/service_worker_client_utils.cc b/chromium/content/browser/service_worker/service_worker_client_utils.cc index 2c7c1274f2e..6f8f367ce0d 100644 --- a/chromium/content/browser/service_worker/service_worker_client_utils.cc +++ b/chromium/content/browser/service_worker/service_worker_client_utils.cc @@ -5,9 +5,13 @@ #include "content/browser/service_worker/service_worker_client_utils.h" #include <algorithm> +#include <tuple> +#include "base/location.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/single_thread_task_runner.h" +#include "base/threading/thread_task_runner_handle.h" #include "content/browser/frame_host/frame_tree_node.h" #include "content/browser/frame_host/render_frame_host_impl.h" #include "content/browser/service_worker/service_worker_context_core.h" @@ -86,7 +90,7 @@ class OpenURLObserver : public WebContentsObserver { BrowserThread::IO, FROM_HERE, base::Bind(callback_, render_process_id, render_frame_id)); Observe(nullptr); - base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); + base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); } int frame_tree_node_id_; @@ -149,7 +153,14 @@ ServiceWorkerClientInfo FocusOnUI(int render_process_id, void DidOpenURLOnUI(const OpenURLCallback& callback, WebContents* web_contents) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - DCHECK(web_contents); + + if (!web_contents) { + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::Bind(callback, ChildProcessHost::kInvalidUniqueID, + MSG_ROUTING_NONE)); + return; + } RenderFrameHostImpl* rfhi = static_cast<RenderFrameHostImpl*>(web_contents->GetMainFrame()); @@ -266,11 +277,11 @@ void DidNavigate(const base::WeakPtr<ServiceWorkerContextCore>& context, void AddWindowClient( ServiceWorkerProviderHost* host, - std::vector<base::Tuple<int, int, std::string>>* client_info) { + std::vector<std::tuple<int, int, std::string>>* client_info) { DCHECK_CURRENTLY_ON(BrowserThread::IO); if (host->client_type() != blink::WebServiceWorkerClientTypeWindow) return; - client_info->push_back(base::MakeTuple(host->process_id(), host->frame_id(), + client_info->push_back(std::make_tuple(host->process_id(), host->frame_id(), host->client_uuid())); } @@ -295,7 +306,7 @@ void AddNonWindowClient(ServiceWorkerProviderHost* host, void OnGetWindowClientsOnUI( // The tuple contains process_id, frame_id, client_uuid. - const std::vector<base::Tuple<int, int, std::string>>& clients_info, + const std::vector<std::tuple<int, int, std::string>>& clients_info, const GURL& script_url, const GetWindowClientsCallback& callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -303,7 +314,7 @@ void OnGetWindowClientsOnUI( std::unique_ptr<ServiceWorkerClients> clients(new ServiceWorkerClients); for (const auto& it : clients_info) { ServiceWorkerClientInfo info = GetWindowClientInfoOnUI( - base::get<0>(it), base::get<1>(it), base::get<2>(it)); + std::get<0>(it), std::get<1>(it), std::get<2>(it)); // If the request to the provider_host returned an empty // ServiceWorkerClientInfo, that means that it wasn't possible to associate @@ -375,7 +386,7 @@ void GetWindowClients(const base::WeakPtr<ServiceWorkerVersion>& controller, DCHECK(options.client_type == blink::WebServiceWorkerClientTypeWindow || options.client_type == blink::WebServiceWorkerClientTypeAll); - std::vector<base::Tuple<int, int, std::string>> clients_info; + std::vector<std::tuple<int, int, std::string>> clients_info; if (!options.include_uncontrolled) { for (auto& controllee : controller->controllee_map()) AddWindowClient(controllee.second, &clients_info); |