Index: content/browser/navigator_connect/navigator_connect_service_worker_service_factory.h |
diff --git a/content/browser/navigator_connect/navigator_connect_dispatcher_host.h b/content/browser/navigator_connect/navigator_connect_service_worker_service_factory.h |
similarity index 35% |
copy from content/browser/navigator_connect/navigator_connect_dispatcher_host.h |
copy to content/browser/navigator_connect/navigator_connect_service_worker_service_factory.h |
index 86350a7d5f744d5d9f7662489938c6b31919fcf3..4e0239f8c4df9fba0e3b97625c28d9490961aab0 100644 |
--- a/content/browser/navigator_connect/navigator_connect_dispatcher_host.h |
+++ b/content/browser/navigator_connect/navigator_connect_service_worker_service_factory.h |
@@ -1,72 +1,61 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef CONTENT_BROWSER_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_DISPATCHER_HOST_H_ |
-#define CONTENT_BROWSER_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_DISPATCHER_HOST_H_ |
+#ifndef CONTENT_BROWSER_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_SERVICE_WORKER_SERVICE_FACTORY_H_ |
+#define CONTENT_BROWSER_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_SERVICE_WORKER_SERVICE_FACTORY_H_ |
-#include "content/common/service_worker/service_worker_status_code.h" |
-#include "content/public/browser/browser_message_filter.h" |
+#include <map> |
-class GURL; |
+#include "base/memory/weak_ptr.h" |
+#include "content/common/service_worker/service_worker_status_code.h" |
+#include "content/public/browser/navigator_connect_service_factory.h" |
namespace content { |
-struct CrossOriginServiceWorkerClient; |
-class NavigatorConnectContext; |
class ServiceWorkerContextWrapper; |
class ServiceWorkerRegistration; |
-// Receives navigator.connect connection attempts from a child process. |
-// Attempts to find a service that serves the URL the connection is made to |
-// and sets up the actual connection. |
-// Constructed on the UI thread, but all other methods are called on the IO |
-// thread. Typically there is one instance of this class for each renderer |
-// process, and this class lives at least as long as the renderer process is |
-// alive (since this class is refcounted it could outlive the renderer process |
-// if it is still handling a connection attempt). |
-class NavigatorConnectDispatcherHost : public BrowserMessageFilter { |
+// Service worker specific NavigatorConnectServiceFactory implementation. This |
+// class accepts all URLs (and thus has to be the first factory to be added to |
+// NavigatorConnectContext or no other factories will ever by used). |
+// Tries to find a service worker registration to handle the url being connected |
+// to. |
+class NavigatorConnectServiceWorkerServiceFactory |
+ : public NavigatorConnectServiceFactory { |
public: |
- NavigatorConnectDispatcherHost( |
- const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context, |
- const scoped_refptr<NavigatorConnectContext>& navigator_connect_context); |
- |
- private: |
- ~NavigatorConnectDispatcherHost() override; |
+ explicit NavigatorConnectServiceWorkerServiceFactory( |
+ const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context); |
+ ~NavigatorConnectServiceWorkerServiceFactory() override; |
- // BrowserMessageFilter implementation. |
- bool OnMessageReceived(const IPC::Message& message) override; |
- |
- // IPC Message handlers. |
- void OnConnect(int thread_id, |
- int request_id, |
- const CrossOriginServiceWorkerClient& client); |
+ // NavigatorConnectServiceFactory implementation. |
+ bool HandlesUrl(const GURL& target_url) override; |
+ void Connect(const NavigatorConnectClient& client, |
+ const ConnectCallback& callback) override; |
+ private: |
// Callback called when the Service Worker context found (or didn't find) a |
// service worker registration to serve a particular URL. |
void GotServiceWorkerRegistration( |
- int thread_id, |
- int request_id, |
- const CrossOriginServiceWorkerClient& client, |
+ const ConnectCallback& callback, |
+ const NavigatorConnectClient& client, |
ServiceWorkerStatusCode status, |
const scoped_refptr<ServiceWorkerRegistration>& registration); |
// Callback called when the service worker finished handling the cross origin |
// connection event. |
void OnConnectResult( |
- int thread_id, |
- int request_id, |
- const CrossOriginServiceWorkerClient& client, |
+ const ConnectCallback& callback, |
+ const NavigatorConnectClient& client, |
const scoped_refptr<ServiceWorkerRegistration>& registration, |
ServiceWorkerStatusCode status, |
bool accept_connection); |
scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_; |
- scoped_refptr<NavigatorConnectContext> navigator_connect_context_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NavigatorConnectDispatcherHost); |
+ base::WeakPtrFactory<NavigatorConnectServiceWorkerServiceFactory> |
+ weak_factory_; |
}; |
} // namespace content |
-#endif // CONTENT_BROWSER_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_DISPATCHER_HOST_H_ |
+#endif // CONTENT_BROWSER_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_SERVICE_WORKER_SERVICE_FACTORY_H_ |