1// Copyright (c) 2012 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/loader/resource_message_filter.h"
6
7#include "content/browser/appcache/chrome_appcache_service.h"
8#include "content/browser/fileapi/chrome_blob_storage_context.h"
9#include "content/browser/loader/resource_dispatcher_host_impl.h"
10#include "content/browser/service_worker/service_worker_context_wrapper.h"
11#include "content/common/resource_messages.h"
12#include "content/public/browser/resource_context.h"
13#include "webkit/browser/fileapi/file_system_context.h"
14
15namespace content {
16
17ResourceMessageFilter::ResourceMessageFilter(
18    int child_id,
19    int process_type,
20    ChromeAppCacheService* appcache_service,
21    ChromeBlobStorageContext* blob_storage_context,
22    fileapi::FileSystemContext* file_system_context,
23    ServiceWorkerContextWrapper* service_worker_context,
24    const GetContextsCallback& get_contexts_callback)
25    : BrowserMessageFilter(ResourceMsgStart),
26      child_id_(child_id),
27      process_type_(process_type),
28      appcache_service_(appcache_service),
29      blob_storage_context_(blob_storage_context),
30      file_system_context_(file_system_context),
31      service_worker_context_(service_worker_context),
32      get_contexts_callback_(get_contexts_callback),
33      weak_ptr_factory_(this) {
34}
35
36ResourceMessageFilter::~ResourceMessageFilter() {
37}
38
39void ResourceMessageFilter::OnChannelClosing() {
40  // Unhook us from all pending network requests so they don't get sent to a
41  // deleted object.
42  ResourceDispatcherHostImpl::Get()->CancelRequestsForProcess(child_id_);
43}
44
45bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
46  return ResourceDispatcherHostImpl::Get()->OnMessageReceived(message, this);
47}
48
49void ResourceMessageFilter::GetContexts(
50    const ResourceHostMsg_Request& request,
51    ResourceContext** resource_context,
52    net::URLRequestContext** request_context) {
53  return get_contexts_callback_.Run(request, resource_context, request_context);
54}
55
56base::WeakPtr<ResourceMessageFilter> ResourceMessageFilter::GetWeakPtr() {
57  return weak_ptr_factory_.GetWeakPtr();
58}
59
60}  // namespace content
61