1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#ifndef CONTENT_CHILD_APPCACHE_APPCACHE_DISPATCHER_H_
6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define CONTENT_CHILD_APPCACHE_APPCACHE_DISPATCHER_H_
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string>
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector>
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/scoped_ptr.h"
12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/child/appcache/appcache_backend_proxy.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/common/appcache_interfaces.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ipc/ipc_listener.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content {
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Dispatches appcache related messages sent to a child process from the
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// main browser process. There is one instance per child process. Messages
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// are dispatched on the main child thread. The ChildThread base class
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// creates an instance and delegates calls to it.
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass AppCacheDispatcher : public IPC::Listener {
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AppCacheDispatcher(IPC::Sender* sender,
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                     AppCacheFrontend* frontend);
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~AppCacheDispatcher();
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AppCacheBackendProxy* backend_proxy() { return &backend_proxy_; }
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // IPC::Listener implementation
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Ipc message handlers
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnCacheSelected(int host_id, const AppCacheInfo& info);
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnStatusChanged(const std::vector<int>& host_ids,
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                       AppCacheStatus status);
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnEventRaised(const std::vector<int>& host_ids,
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                     AppCacheEventID event_id);
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnProgressEventRaised(const std::vector<int>& host_ids,
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                             const GURL& url, int num_total, int num_complete);
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnErrorEventRaised(const std::vector<int>& host_ids,
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                          const AppCacheErrorDetails& details);
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnLogMessage(int host_id, int log_level, const std::string& message);
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnContentBlocked(int host_id, const GURL& manifest_url);
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AppCacheBackendProxy backend_proxy_;
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<AppCacheFrontend> frontend_;
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace content
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif  // CONTENT_CHILD_APPCACHE_APPCACHE_DISPATCHER_H_
54