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