1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/child/service_worker/service_worker_handle_reference.h"
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/child/thread_safe_sender.h"
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/common/service_worker/service_worker_messages.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace content {
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)scoped_ptr<ServiceWorkerHandleReference>
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ServiceWorkerHandleReference::Create(
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const ServiceWorkerObjectInfo& info,
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ThreadSafeSender* sender) {
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DCHECK(sender);
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return make_scoped_ptr(new ServiceWorkerHandleReference(info, sender, true));
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)scoped_ptr<ServiceWorkerHandleReference> ServiceWorkerHandleReference::Adopt(
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const ServiceWorkerObjectInfo& info,
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ThreadSafeSender* sender) {
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DCHECK(sender);
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return make_scoped_ptr(new ServiceWorkerHandleReference(info, sender, false));
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ServiceWorkerHandleReference::ServiceWorkerHandleReference(
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const ServiceWorkerObjectInfo& info,
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ThreadSafeSender* sender,
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    bool increment_ref_in_ctor)
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    : info_(info),
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      sender_(sender) {
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (increment_ref_in_ctor &&
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      info_.handle_id != kInvalidServiceWorkerHandleId) {
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    sender_->Send(
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        new ServiceWorkerHostMsg_IncrementServiceWorkerRefCount(
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            info_.handle_id));
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ServiceWorkerHandleReference::~ServiceWorkerHandleReference() {
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (info_.handle_id != kInvalidServiceWorkerHandleId) {
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    sender_->Send(
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        new ServiceWorkerHostMsg_DecrementServiceWorkerRefCount(
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            info_.handle_id));
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace content
50