+ DCHECK(version);
+ DCHECK_EQ(version->registration_id(), registration->id());
+ callback.Run(status,
+ registration->id(),
+ version->version_id());
+}
+
+ServiceWorkerRegistration* ServiceWorkerContextCore::GetLiveRegistration(
+ int64 id) {
+ RegistrationsMap::iterator it = live_registrations_.find(id);
+ return (it != live_registrations_.end()) ? it->second : NULL;
+}
+
+void ServiceWorkerContextCore::AddLiveRegistration(
+ ServiceWorkerRegistration* registration) {
+ DCHECK(!GetLiveRegistration(registration->id()));
+ live_registrations_[registration->id()] = registration;
+}
+
+void ServiceWorkerContextCore::RemoveLiveRegistration(int64 id) {
+ live_registrations_.erase(id);
+}
+
+ServiceWorkerVersion* ServiceWorkerContextCore::GetLiveVersion(
+ int64 id) {
+ VersionMap::iterator it = live_versions_.find(id);
+ return (it != live_versions_.end()) ? it->second : NULL;
+}
+
+void ServiceWorkerContextCore::AddLiveVersion(ServiceWorkerVersion* version) {
+ DCHECK(!GetLiveVersion(version->version_id()));
+ live_versions_[version->version_id()] = version;
+ version->AddListener(this);
+}
+
+void ServiceWorkerContextCore::RemoveLiveVersion(int64 id) {
+ live_versions_.erase(id);
+}
+
+int ServiceWorkerContextCore::GetNewServiceWorkerHandleId() {
+ return next_handle_id_++;
+}
+
+void ServiceWorkerContextCore::OnWorkerStarted(ServiceWorkerVersion* version) {
+ if (!observer_list_)
+ return;
+ observer_list_->Notify(&ServiceWorkerContextObserver::OnWorkerStarted,
+ version->version_id(),
+ version->embedded_worker()->process_id(),
+ version->embedded_worker()->thread_id());
+}
+
+void ServiceWorkerContextCore::OnWorkerStopped(ServiceWorkerVersion* version) {
+ if (!observer_list_)
+ return;
+ observer_list_->Notify(&ServiceWorkerContextObserver::OnWorkerStopped,
+ version->version_id(),
+ version->embedded_worker()->process_id(),
+ version->embedded_worker()->thread_id());
+}
+
+void ServiceWorkerContextCore::OnVersionStateChanged(
+ ServiceWorkerVersion* version) {
+ if (!observer_list_)
+ return;
+ observer_list_->Notify(&ServiceWorkerContextObserver::OnVersionStateChanged,
+ version->version_id());
+}
+
+void ServiceWorkerContextCore::OnErrorReported(
+ ServiceWorkerVersion* version,
+ const base::string16& error_message,
+ int line_number,
+ int column_number,
+ const GURL& source_url) {
+ if (!observer_list_)
+ return;
+ observer_list_->Notify(
+ &ServiceWorkerContextObserver::OnErrorReported,
+ version->version_id(),
+ version->embedded_worker()->process_id(),
+ version->embedded_worker()->thread_id(),
+ ServiceWorkerContextObserver::ErrorInfo(
+ error_message, line_number, column_number, source_url));
+}
+
+void ServiceWorkerContextCore::OnReportConsoleMessage(
+ ServiceWorkerVersion* version,
+ int source_identifier,
+ int message_level,
+ const base::string16& message,
+ int line_number,
+ const GURL& source_url) {
+ if (!observer_list_)
+ return;
+ observer_list_->Notify(
+ &ServiceWorkerContextObserver::OnReportConsoleMessage,
+ version->version_id(),
+ version->embedded_worker()->process_id(),
+ version->embedded_worker()->thread_id(),
+ ServiceWorkerContextObserver::ConsoleMessage(
+ source_identifier, message_level, message, line_number, source_url));