Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1995)

Unified Diff: content/browser/service_worker/service_worker_context_wrapper.h

Issue 238043002: Teach EmbeddedWorkerInstance to create a process when it needs one. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Null out browser_context_ in Shutdown Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_context_wrapper.h
diff --git a/content/browser/service_worker/service_worker_context_wrapper.h b/content/browser/service_worker/service_worker_context_wrapper.h
index cea9c06a4d07cc4ed8e9bdf7a32cf687bf796c17..e3875030da74bb4ebdcef3f0ed2ecc207406d9d6 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.h
+++ b/content/browser/service_worker/service_worker_context_wrapper.h
@@ -22,6 +22,8 @@ class QuotaManagerProxy;
namespace content {
+class BrowserContext;
+class ServiceWorkerContextCore;
class ServiceWorkerContextObserver;
// A refcounted wrapper class for our core object. Higher level content lib
@@ -43,13 +45,30 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
// The core context is only for use on the IO thread.
ServiceWorkerContextCore* context();
- // ServiceWorkerContext implementation:
- virtual void RegisterServiceWorker(const GURL& pattern,
- const GURL& script_url,
- int source_process_id,
- const ResultCallback& continuation)
- OVERRIDE;
+ // Call this on the UI thread to get a reference to a running process suitable
+ // for starting the Service Worker at |script_url|. Processes in |process_ids|
+ // will be checked in order for existence, and if none exist, then a new
+ // process will be created. Posts |callback| to the IO thread to indicate
+ // whether creation succeeded and the process ID that has a new reference.
+ //
+ // Process creation can fail with SERVICE_WORKER_ERROR_START_WORKER_FAILED if
+ // RenderProcessHost::Init fails.
+ void IncrementWorkerRef(
kinuko 2014/04/25 13:46:35 Could these method be factored out into its own cl
Jeffrey Yasskin 2014/04/26 03:52:19 Done.
+ const std::vector<int>& process_ids,
+ const GURL& script_url,
+ const base::Callback<void(ServiceWorkerStatusCode, int process_id)>&
+ callback) const;
+
+ // Call this on the UI thread to drop a reference to a process that was
+ // running a Service Worker. This must match a call to IncrementWorkerRef.
+ static void DecrementWorkerRef(int process_id);
+ // ServiceWorkerContext implementation:
+ virtual void RegisterServiceWorker(
+ const GURL& pattern,
+ const GURL& script_url,
+ BrowserContext* context,
+ const ResultCallback& continuation) OVERRIDE;
virtual void UnregisterServiceWorker(const GURL& pattern,
int source_process_id,
const ResultCallback& continuation)
@@ -58,10 +77,18 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
void AddObserver(ServiceWorkerContextObserver* observer);
void RemoveObserver(ServiceWorkerContextObserver* observer);
+ // These functions will be called on the UI thread, take a process ID to
+ // Increment/DecrementWorkerRefCount(), and should return whether the process
+ // existed. Null Callbacks reset the behavior to the default.
+ static void ResetWorkerRefCountOperationsForTest(
+ const base::Callback<bool(int)>& increment = base::Callback<bool(int)>(),
+ const base::Callback<bool(int)>& decrement = base::Callback<bool(int)>());
+
private:
friend class base::RefCountedThreadSafe<ServiceWorkerContextWrapper>;
virtual ~ServiceWorkerContextWrapper();
+ BrowserContext* browser_context_; // UI thread-only; cleared in Shutdown().
scoped_ptr<ServiceWorkerContextCore> context_core_;
scoped_refptr<ObserverListThreadSafe<ServiceWorkerContextObserver> >
observer_list_;

Powered by Google App Engine
This is Rietveld 408576698