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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/appcache/appcache_dispatcher_host.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/appcache/chrome_appcache_service.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/appcache_messages.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AppCacheDispatcherHost::AppCacheDispatcherHost(
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ChromeAppCacheService* appcache_service,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int process_id)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : BrowserMessageFilter(AppCacheMsgStart),
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      appcache_service_(appcache_service),
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      frontend_proxy_(this),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      process_id_(process_id) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) {
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    backend_impl_.Initialize(
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        appcache_service_.get(), &frontend_proxy_, process_id_);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get_status_callback_ =
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&AppCacheDispatcherHost::GetStatusCallback,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_update_callback_ =
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&AppCacheDispatcherHost::StartUpdateCallback,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    swap_cache_callback_ =
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&AppCacheDispatcherHost::SwapCacheCallback,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool AppCacheDispatcherHost::OnMessageReceived(const IPC::Message& message) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool handled = true;
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP(AppCacheDispatcherHost, message)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_RegisterHost, OnRegisterHost)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_UnregisterHost, OnUnregisterHost)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_SetSpawningHostId, OnSetSpawningHostId)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_GetResourceList, OnGetResourceList)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_SelectCache, OnSelectCache)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_SelectCacheForWorker,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnSelectCacheForWorker)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_SelectCacheForSharedWorker,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnSelectCacheForSharedWorker)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(AppCacheHostMsg_MarkAsForeignEntry,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnMarkAsForeignEntry)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER_DELAY_REPLY(AppCacheHostMsg_GetStatus, OnGetStatus)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER_DELAY_REPLY(AppCacheHostMsg_StartUpdate, OnStartUpdate)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER_DELAY_REPLY(AppCacheHostMsg_SwapCache, OnSwapCache)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  IPC_END_MESSAGE_MAP()
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return handled;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AppCacheDispatcherHost::~AppCacheDispatcherHost() {}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::BadMessageReceived() {
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  RecordAction(base::UserMetricsAction("BadMessageTerminate_ACDH"));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserMessageFilter::BadMessageReceived();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnRegisterHost(int host_id) {
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!backend_impl_.RegisterHost(host_id)) {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnUnregisterHost(int host_id) {
79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!backend_impl_.UnregisterHost(host_id)) {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnSetSpawningHostId(
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int host_id, int spawning_host_id) {
88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!backend_impl_.SetSpawningHostId(host_id, spawning_host_id))
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnSelectCache(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int host_id, const GURL& document_url,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 cache_document_was_loaded_from,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const GURL& opt_manifest_url) {
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (!backend_impl_.SelectCache(host_id,
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                   document_url,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   cache_document_was_loaded_from,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   opt_manifest_url)) {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    frontend_proxy_.OnCacheSelected(host_id, AppCacheInfo());
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnSelectCacheForWorker(
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int host_id, int parent_process_id, int parent_host_id) {
112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!backend_impl_.SelectCacheForWorker(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            host_id, parent_process_id, parent_host_id)) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    frontend_proxy_.OnCacheSelected(host_id, AppCacheInfo());
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnSelectCacheForSharedWorker(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int host_id, int64 appcache_id) {
124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!backend_impl_.SelectCacheForSharedWorker(host_id, appcache_id))
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    frontend_proxy_.OnCacheSelected(host_id, AppCacheInfo());
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnMarkAsForeignEntry(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int host_id, const GURL& document_url,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 cache_document_was_loaded_from) {
135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (!backend_impl_.MarkAsForeignEntry(
137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            host_id, document_url, cache_document_was_loaded_from)) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnGetResourceList(
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int host_id, std::vector<AppCacheResourceInfo>* params) {
145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get())
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    backend_impl_.GetResourceList(host_id, params);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnGetStatus(int host_id, IPC::Message* reply_msg) {
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (pending_reply_msg_) {
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BadMessageReceived();
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delete reply_msg;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pending_reply_msg_.reset(reply_msg);
157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (!backend_impl_.GetStatusWithCallback(
159868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            host_id, get_status_callback_, reply_msg)) {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  GetStatusCallback(APPCACHE_STATUS_UNCACHED, reply_msg);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnStartUpdate(int host_id,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           IPC::Message* reply_msg) {
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (pending_reply_msg_) {
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BadMessageReceived();
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delete reply_msg;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pending_reply_msg_.reset(reply_msg);
177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (!backend_impl_.StartUpdateWithCallback(
179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            host_id, start_update_callback_, reply_msg)) {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartUpdateCallback(false, reply_msg);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::OnSwapCache(int host_id, IPC::Message* reply_msg) {
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (pending_reply_msg_) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BadMessageReceived();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delete reply_msg;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pending_reply_msg_.reset(reply_msg);
196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (appcache_service_.get()) {
197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (!backend_impl_.SwapCacheWithCallback(
198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            host_id, swap_cache_callback_, reply_msg)) {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BadMessageReceived();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SwapCacheCallback(false, reply_msg);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::GetStatusCallback(
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    AppCacheStatus status, void* param) {
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC::Message* reply_msg = reinterpret_cast<IPC::Message*>(param);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(pending_reply_msg_.get(), reply_msg);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppCacheHostMsg_GetStatus::WriteReplyParams(reply_msg, status);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Send(pending_reply_msg_.release());
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::StartUpdateCallback(bool result, void* param) {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC::Message* reply_msg = reinterpret_cast<IPC::Message*>(param);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(pending_reply_msg_.get(), reply_msg);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppCacheHostMsg_StartUpdate::WriteReplyParams(reply_msg, result);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Send(pending_reply_msg_.release());
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheDispatcherHost::SwapCacheCallback(bool result, void* param) {
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC::Message* reply_msg = reinterpret_cast<IPC::Message*>(param);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(pending_reply_msg_.get(), reply_msg);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppCacheHostMsg_SwapCache::WriteReplyParams(reply_msg, result);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Send(pending_reply_msg_.release());
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
230