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

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

Issue 145033012: Make ServiceWorkerVersion::{Start,Stop}Worker take callback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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_version.h
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h
index 3fae7d9cfde0b406c5c4ec9cbd2ad4a9955a7521..82881d9811c1374e874c427aebd9bba8d5b5b622 100644
--- a/content/browser/service_worker/service_worker_version.h
+++ b/content/browser/service_worker/service_worker_version.h
@@ -6,16 +6,18 @@
#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_
#include "base/basictypes.h"
+#include "base/callback.h"
#include "base/gtest_prod_util.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/common/content_export.h"
+#include "content/common/service_worker/service_worker_status_code.h"
class GURL;
namespace content {
-class EmbeddedWorkerInstance;
class EmbeddedWorkerRegistry;
class ServiceWorkerProviderHost;
class ServiceWorkerRegistration;
@@ -56,6 +58,15 @@ struct ServiceWorkerFetchRequest;
class CONTENT_EXPORT ServiceWorkerVersion
: NON_EXPORTED_BASE(public base::RefCounted<ServiceWorkerVersion>) {
public:
+ typedef base::Callback<void(ServiceWorkerStatusCode)> StatusCallback;
+
+ enum Status {
+ STOPPED = EmbeddedWorkerInstance::STOPPED,
+ STARTING = EmbeddedWorkerInstance::STARTING,
+ RUNNING = EmbeddedWorkerInstance::RUNNING,
+ STOPPING = EmbeddedWorkerInstance::STOPPING,
+ };
+
ServiceWorkerVersion(
ServiceWorkerRegistration* registration,
EmbeddedWorkerRegistry* worker_registry,
@@ -66,23 +77,44 @@ class CONTENT_EXPORT ServiceWorkerVersion
void Shutdown();
bool is_shutdown() const { return is_shutdown_; }
- // Starts and stops an embedded worker for this version.
- void StartWorker();
- void StopWorker();
+ Status status() const {
+ return static_cast<Status>(embedded_worker_->status());
+ }
+
+ // Starts an embedded worker for this version.
+ // It is not valid to call this while there's other inflight start or
+ // stop process running.
+ // This returns OK (success) if the worker is already running.
+ void StartWorker(const StatusCallback& callback);
+
+ // Starts an embedded worker for this version.
+ // It is not valid to call this while there's other inflight start or
+ // stop process running.
+ // This returns OK (success) if the worker is already stopped.
+ void StopWorker(const StatusCallback& callback);
// Sends fetch event to the associated embedded worker.
// This immediately returns false if the worker is not running
// or sending a message to the child process fails.
+ // TODO(kinuko): Make this take callback as well.
bool DispatchFetchEvent(const ServiceWorkerFetchRequest& request);
- // Called when this version is associated to a provider host.
- // Non-null |provider_host| must be given.
- void OnAssociateProvider(ServiceWorkerProviderHost* provider_host);
- void OnUnassociateProvider(ServiceWorkerProviderHost* provider_host);
+ // These are expected to be called when a renderer process host for the
+ // same-origin as for this ServiceWorkerVersion is created. The added
+ // processes are used to run an in-renderer embedded worker.
+ void AddProcessToWorker(int process_id);
+ void RemoveProcessToWorker(int process_id);
+
+ EmbeddedWorkerInstance* embedded_worker() { return embedded_worker_.get(); }
private:
friend class base::RefCounted<ServiceWorkerVersion>;
+ // Embedded worker observer classes.
+ class WorkerObserverBase;
+ class StartObserver;
+ class StopObserver;
+
~ServiceWorkerVersion();
const int64 version_id_;
@@ -91,6 +123,7 @@ class CONTENT_EXPORT ServiceWorkerVersion
scoped_refptr<ServiceWorkerRegistration> registration_;
scoped_ptr<EmbeddedWorkerInstance> embedded_worker_;
+ scoped_ptr<EmbeddedWorkerInstance::Observer> observer_;
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersion);
};
« no previous file with comments | « content/browser/service_worker/service_worker_browsertest.cc ('k') | content/browser/service_worker/service_worker_version.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698