service_worker_provider_host.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Copyright 2013 The Chromium Authors. All rights reserved.
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Use of this source code is governed by a BSD-style license that can be
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// found in the LICENSE file.
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/browser/service_worker/service_worker_provider_host.h"
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/stl_util.h"
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/browser/service_worker/service_worker_utils.h"
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/browser/service_worker/service_worker_version.h"
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnamespace content {
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgServiceWorkerProviderHost::ServiceWorkerProviderHost(
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int process_id, int provider_id)
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    : process_id_(process_id),
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      provider_id_(provider_id) {
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgServiceWorkerProviderHost::~ServiceWorkerProviderHost() {
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  AssociateVersion(NULL);
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ServiceWorkerProviderHost::AssociateVersion(
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ServiceWorkerVersion* version) {
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if (associated_version())
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    associated_version_->RemoveProcessToWorker(process_id_);
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  associated_version_ = version;
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if (version)
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    version->AddProcessToWorker(process_id_);
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ServiceWorkerProviderHost::AddScriptClient(int thread_id) {
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  DCHECK(!ContainsKey(script_client_thread_ids_, thread_id));
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  script_client_thread_ids_.insert(thread_id);
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ServiceWorkerProviderHost::RemoveScriptClient(int thread_id) {
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  DCHECK(ContainsKey(script_client_thread_ids_, thread_id));
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  script_client_thread_ids_.erase(thread_id);
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgbool ServiceWorkerProviderHost::ShouldHandleRequest(
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ResourceType::Type resource_type) const {
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if (ServiceWorkerUtils::IsMainResourceType(resource_type))
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return true;
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if (associated_version())
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return true;
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  // TODO(kinuko): Handle ServiceWorker cases.
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  // For now we always return false here, so that we don't handle
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  // requests for ServiceWorker (either for the main or sub resources).
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  return false;
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}  // namespace content
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org