Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Side by Side Diff: content/browser/appcache/appcache_dispatcher_host.cc

Issue 1441683004: AppCache: Use WeakPtr<> to fix a potential uaf bug. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/appcache/appcache_dispatcher_host.h" 5 #include "content/browser/appcache/appcache_dispatcher_host.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "content/browser/appcache/chrome_appcache_service.h" 9 #include "content/browser/appcache/chrome_appcache_service.h"
10 #include "content/browser/bad_message.h" 10 #include "content/browser/bad_message.h"
11 #include "content/common/appcache_messages.h" 11 #include "content/common/appcache_messages.h"
12 #include "content/public/browser/user_metrics.h" 12 #include "content/public/browser/user_metrics.h"
13 13
14 namespace content { 14 namespace content {
15 15
16 AppCacheDispatcherHost::AppCacheDispatcherHost( 16 AppCacheDispatcherHost::AppCacheDispatcherHost(
17 ChromeAppCacheService* appcache_service, 17 ChromeAppCacheService* appcache_service,
18 int process_id) 18 int process_id)
19 : BrowserMessageFilter(AppCacheMsgStart), 19 : BrowserMessageFilter(AppCacheMsgStart),
20 appcache_service_(appcache_service), 20 appcache_service_(appcache_service),
21 frontend_proxy_(this), 21 frontend_proxy_(this),
22 process_id_(process_id) { 22 process_id_(process_id),
23 weak_factory_(this) {
23 } 24 }
24 25
25 void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) { 26 void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) {
26 if (appcache_service_.get()) { 27 if (appcache_service_.get()) {
27 backend_impl_.Initialize( 28 backend_impl_.Initialize(
28 appcache_service_.get(), &frontend_proxy_, process_id_); 29 appcache_service_.get(), &frontend_proxy_, process_id_);
29 get_status_callback_ = 30 get_status_callback_ =
30 base::Bind(&AppCacheDispatcherHost::GetStatusCallback, 31 base::Bind(&AppCacheDispatcherHost::GetStatusCallback,
31 base::Unretained(this)); 32 weak_factory_.GetWeakPtr());
32 start_update_callback_ = 33 start_update_callback_ =
33 base::Bind(&AppCacheDispatcherHost::StartUpdateCallback, 34 base::Bind(&AppCacheDispatcherHost::StartUpdateCallback,
34 base::Unretained(this)); 35 weak_factory_.GetWeakPtr());
35 swap_cache_callback_ = 36 swap_cache_callback_ =
36 base::Bind(&AppCacheDispatcherHost::SwapCacheCallback, 37 base::Bind(&AppCacheDispatcherHost::SwapCacheCallback,
37 base::Unretained(this)); 38 weak_factory_.GetWeakPtr());
38 } 39 }
39 } 40 }
40 41
41 bool AppCacheDispatcherHost::OnMessageReceived(const IPC::Message& message) { 42 bool AppCacheDispatcherHost::OnMessageReceived(const IPC::Message& message) {
42 bool handled = true; 43 bool handled = true;
43 IPC_BEGIN_MESSAGE_MAP(AppCacheDispatcherHost, message) 44 IPC_BEGIN_MESSAGE_MAP(AppCacheDispatcherHost, message)
44 IPC_MESSAGE_HANDLER(AppCacheHostMsg_RegisterHost, OnRegisterHost) 45 IPC_MESSAGE_HANDLER(AppCacheHostMsg_RegisterHost, OnRegisterHost)
45 IPC_MESSAGE_HANDLER(AppCacheHostMsg_UnregisterHost, OnUnregisterHost) 46 IPC_MESSAGE_HANDLER(AppCacheHostMsg_UnregisterHost, OnUnregisterHost)
46 IPC_MESSAGE_HANDLER(AppCacheHostMsg_SetSpawningHostId, OnSetSpawningHostId) 47 IPC_MESSAGE_HANDLER(AppCacheHostMsg_SetSpawningHostId, OnSetSpawningHostId)
47 IPC_MESSAGE_HANDLER(AppCacheHostMsg_GetResourceList, OnGetResourceList) 48 IPC_MESSAGE_HANDLER(AppCacheHostMsg_GetResourceList, OnGetResourceList)
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 } 223 }
223 224
224 void AppCacheDispatcherHost::SwapCacheCallback(bool result, void* param) { 225 void AppCacheDispatcherHost::SwapCacheCallback(bool result, void* param) {
225 IPC::Message* reply_msg = reinterpret_cast<IPC::Message*>(param); 226 IPC::Message* reply_msg = reinterpret_cast<IPC::Message*>(param);
226 DCHECK_EQ(pending_reply_msg_.get(), reply_msg); 227 DCHECK_EQ(pending_reply_msg_.get(), reply_msg);
227 AppCacheHostMsg_SwapCache::WriteReplyParams(reply_msg, result); 228 AppCacheHostMsg_SwapCache::WriteReplyParams(reply_msg, result);
228 Send(pending_reply_msg_.release()); 229 Send(pending_reply_msg_.release());
229 } 230 }
230 231
231 } // namespace content 232 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698