Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / browser / service_worker / service_worker_registration.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/service_worker/service_worker_registration.h"
6
7 #include "content/browser/service_worker/service_worker_context_core.h"
8 #include "content/browser/service_worker/service_worker_info.h"
9 #include "content/public/browser/browser_thread.h"
10
11 namespace content {
12
13 ServiceWorkerRegistration::ServiceWorkerRegistration(
14     const GURL& pattern,
15     const GURL& script_url,
16     int64 registration_id,
17     base::WeakPtr<ServiceWorkerContextCore> context)
18     : pattern_(pattern),
19       script_url_(script_url),
20       registration_id_(registration_id),
21       is_shutdown_(false),
22       context_(context) {
23   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
24   DCHECK(context_);
25   context_->AddLiveRegistration(this);
26 }
27
28 ServiceWorkerRegistration::~ServiceWorkerRegistration() {
29   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
30   if (context_)
31     context_->RemoveLiveRegistration(registration_id_);
32 }
33
34 ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() {
35   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
36   return ServiceWorkerRegistrationInfo(
37       script_url(),
38       pattern(),
39       active_version_ ? active_version_->GetInfo() : ServiceWorkerVersionInfo(),
40       pending_version_ ? pending_version_->GetInfo()
41                        : ServiceWorkerVersionInfo());
42 }
43
44 ServiceWorkerVersion* ServiceWorkerRegistration::GetNewestVersion() {
45   if (active_version())
46     return active_version();
47   return pending_version();
48 }
49
50 void ServiceWorkerRegistration::ActivatePendingVersion() {
51   active_version_->SetStatus(ServiceWorkerVersion::DEACTIVATED);
52   active_version_ = pending_version_;
53   // TODO(kinuko): This should be set to ACTIVATING until activation finishes.
54   active_version_->SetStatus(ServiceWorkerVersion::ACTIVE);
55   pending_version_ = NULL;
56 }
57
58 }  // namespace content