15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/loader/resource_message_filter.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/appcache/chrome_appcache_service.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/fileapi/chrome_blob_storage_context.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/loader/resource_dispatcher_host_impl.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/browser/service_worker/service_worker_context_wrapper.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/common/resource_messages.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_context.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ResourceMessageFilter::ResourceMessageFilter(
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int child_id,
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int process_type,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ChromeAppCacheService* appcache_service,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ChromeBlobStorageContext* blob_storage_context,
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    storage::FileSystemContext* file_system_context,
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ServiceWorkerContextWrapper* service_worker_context,
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const GetContextsCallback& get_contexts_callback)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : BrowserMessageFilter(ResourceMsgStart),
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      child_id_(child_id),
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      process_type_(process_type),
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      appcache_service_(appcache_service),
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      blob_storage_context_(blob_storage_context),
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      file_system_context_(file_system_context),
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      service_worker_context_(service_worker_context),
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      get_contexts_callback_(get_contexts_callback),
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      weak_ptr_factory_(this) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ResourceMessageFilter::~ResourceMessageFilter() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ResourceMessageFilter::OnChannelClosing() {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unhook us from all pending network requests so they don't get sent to a
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // deleted object.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResourceDispatcherHostImpl::Get()->CancelRequestsForProcess(child_id_);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return ResourceDispatcherHostImpl::Get()->OnMessageReceived(message, this);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void ResourceMessageFilter::GetContexts(
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const ResourceHostMsg_Request& request,
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    ResourceContext** resource_context,
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    net::URLRequestContext** request_context) {
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return get_contexts_callback_.Run(request, resource_context, request_context);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)base::WeakPtr<ResourceMessageFilter> ResourceMessageFilter::GetWeakPtr() {
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return weak_ptr_factory_.GetWeakPtr();
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
61