OLD | NEW |
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/common/appcache_messages.h" | 10 #include "content/common/appcache_messages.h" |
11 #include "content/public/browser/user_metrics.h" | 11 #include "content/public/browser/user_metrics.h" |
12 | 12 |
13 namespace content { | 13 namespace content { |
14 | 14 |
15 AppCacheDispatcherHost::AppCacheDispatcherHost( | 15 AppCacheDispatcherHost::AppCacheDispatcherHost( |
16 ChromeAppCacheService* appcache_service, | 16 ChromeAppCacheService* appcache_service, |
17 int process_id) | 17 int process_id) |
18 : appcache_service_(appcache_service), | 18 : appcache_service_(appcache_service), |
19 ALLOW_THIS_IN_INITIALIZER_LIST(frontend_proxy_(this)), | 19 ALLOW_THIS_IN_INITIALIZER_LIST(frontend_proxy_(this)), |
20 process_id_(process_id) { | 20 process_id_(process_id) { |
21 } | 21 } |
22 | 22 |
23 void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) { | 23 void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) { |
24 BrowserMessageFilter::OnChannelConnected(peer_pid); | 24 BrowserMessageFilter::OnChannelConnected(peer_pid); |
25 if (appcache_service_.get()) { | 25 if (appcache_service_) { |
26 backend_impl_.Initialize( | 26 backend_impl_.Initialize( |
27 appcache_service_.get(), &frontend_proxy_, process_id_); | 27 appcache_service_.get(), &frontend_proxy_, process_id_); |
28 get_status_callback_ = | 28 get_status_callback_ = |
29 base::Bind(&AppCacheDispatcherHost::GetStatusCallback, | 29 base::Bind(&AppCacheDispatcherHost::GetStatusCallback, |
30 base::Unretained(this)); | 30 base::Unretained(this)); |
31 start_update_callback_ = | 31 start_update_callback_ = |
32 base::Bind(&AppCacheDispatcherHost::StartUpdateCallback, | 32 base::Bind(&AppCacheDispatcherHost::StartUpdateCallback, |
33 base::Unretained(this)); | 33 base::Unretained(this)); |
34 swap_cache_callback_ = | 34 swap_cache_callback_ = |
35 base::Bind(&AppCacheDispatcherHost::SwapCacheCallback, | 35 base::Bind(&AppCacheDispatcherHost::SwapCacheCallback, |
(...skipping 26 matching lines...) Expand all Loading... |
62 } | 62 } |
63 | 63 |
64 AppCacheDispatcherHost::~AppCacheDispatcherHost() {} | 64 AppCacheDispatcherHost::~AppCacheDispatcherHost() {} |
65 | 65 |
66 void AppCacheDispatcherHost::BadMessageReceived() { | 66 void AppCacheDispatcherHost::BadMessageReceived() { |
67 RecordAction(UserMetricsAction("BadMessageTerminate_ACDH")); | 67 RecordAction(UserMetricsAction("BadMessageTerminate_ACDH")); |
68 BrowserMessageFilter::BadMessageReceived(); | 68 BrowserMessageFilter::BadMessageReceived(); |
69 } | 69 } |
70 | 70 |
71 void AppCacheDispatcherHost::OnRegisterHost(int host_id) { | 71 void AppCacheDispatcherHost::OnRegisterHost(int host_id) { |
72 if (appcache_service_.get()) { | 72 if (appcache_service_) { |
73 if (!backend_impl_.RegisterHost(host_id)) { | 73 if (!backend_impl_.RegisterHost(host_id)) { |
74 BadMessageReceived(); | 74 BadMessageReceived(); |
75 } | 75 } |
76 } | 76 } |
77 } | 77 } |
78 | 78 |
79 void AppCacheDispatcherHost::OnUnregisterHost(int host_id) { | 79 void AppCacheDispatcherHost::OnUnregisterHost(int host_id) { |
80 if (appcache_service_.get()) { | 80 if (appcache_service_) { |
81 if (!backend_impl_.UnregisterHost(host_id)) { | 81 if (!backend_impl_.UnregisterHost(host_id)) { |
82 BadMessageReceived(); | 82 BadMessageReceived(); |
83 } | 83 } |
84 } | 84 } |
85 } | 85 } |
86 | 86 |
87 void AppCacheDispatcherHost::OnSetSpawningHostId( | 87 void AppCacheDispatcherHost::OnSetSpawningHostId( |
88 int host_id, int spawning_host_id) { | 88 int host_id, int spawning_host_id) { |
89 if (appcache_service_.get()) { | 89 if (appcache_service_) { |
90 if (!backend_impl_.SetSpawningHostId(host_id, spawning_host_id)) | 90 if (!backend_impl_.SetSpawningHostId(host_id, spawning_host_id)) |
91 BadMessageReceived(); | 91 BadMessageReceived(); |
92 } | 92 } |
93 } | 93 } |
94 | 94 |
95 void AppCacheDispatcherHost::OnSelectCache( | 95 void AppCacheDispatcherHost::OnSelectCache( |
96 int host_id, const GURL& document_url, | 96 int host_id, const GURL& document_url, |
97 int64 cache_document_was_loaded_from, | 97 int64 cache_document_was_loaded_from, |
98 const GURL& opt_manifest_url) { | 98 const GURL& opt_manifest_url) { |
99 if (appcache_service_.get()) { | 99 if (appcache_service_) { |
100 if (!backend_impl_.SelectCache(host_id, document_url, | 100 if (!backend_impl_.SelectCache(host_id, document_url, |
101 cache_document_was_loaded_from, | 101 cache_document_was_loaded_from, |
102 opt_manifest_url)) { | 102 opt_manifest_url)) { |
103 BadMessageReceived(); | 103 BadMessageReceived(); |
104 } | 104 } |
105 } else { | 105 } else { |
106 frontend_proxy_.OnCacheSelected(host_id, appcache::AppCacheInfo()); | 106 frontend_proxy_.OnCacheSelected(host_id, appcache::AppCacheInfo()); |
107 } | 107 } |
108 } | 108 } |
109 | 109 |
110 void AppCacheDispatcherHost::OnSelectCacheForWorker( | 110 void AppCacheDispatcherHost::OnSelectCacheForWorker( |
111 int host_id, int parent_process_id, int parent_host_id) { | 111 int host_id, int parent_process_id, int parent_host_id) { |
112 if (appcache_service_.get()) { | 112 if (appcache_service_) { |
113 if (!backend_impl_.SelectCacheForWorker( | 113 if (!backend_impl_.SelectCacheForWorker( |
114 host_id, parent_process_id, parent_host_id)) { | 114 host_id, parent_process_id, parent_host_id)) { |
115 BadMessageReceived(); | 115 BadMessageReceived(); |
116 } | 116 } |
117 } else { | 117 } else { |
118 frontend_proxy_.OnCacheSelected(host_id, appcache::AppCacheInfo()); | 118 frontend_proxy_.OnCacheSelected(host_id, appcache::AppCacheInfo()); |
119 } | 119 } |
120 } | 120 } |
121 | 121 |
122 void AppCacheDispatcherHost::OnSelectCacheForSharedWorker( | 122 void AppCacheDispatcherHost::OnSelectCacheForSharedWorker( |
123 int host_id, int64 appcache_id) { | 123 int host_id, int64 appcache_id) { |
124 if (appcache_service_.get()) { | 124 if (appcache_service_) { |
125 if (!backend_impl_.SelectCacheForSharedWorker(host_id, appcache_id)) | 125 if (!backend_impl_.SelectCacheForSharedWorker(host_id, appcache_id)) |
126 BadMessageReceived(); | 126 BadMessageReceived(); |
127 } else { | 127 } else { |
128 frontend_proxy_.OnCacheSelected(host_id, appcache::AppCacheInfo()); | 128 frontend_proxy_.OnCacheSelected(host_id, appcache::AppCacheInfo()); |
129 } | 129 } |
130 } | 130 } |
131 | 131 |
132 void AppCacheDispatcherHost::OnMarkAsForeignEntry( | 132 void AppCacheDispatcherHost::OnMarkAsForeignEntry( |
133 int host_id, const GURL& document_url, | 133 int host_id, const GURL& document_url, |
134 int64 cache_document_was_loaded_from) { | 134 int64 cache_document_was_loaded_from) { |
135 if (appcache_service_.get()) { | 135 if (appcache_service_) { |
136 if (!backend_impl_.MarkAsForeignEntry(host_id, document_url, | 136 if (!backend_impl_.MarkAsForeignEntry(host_id, document_url, |
137 cache_document_was_loaded_from)) { | 137 cache_document_was_loaded_from)) { |
138 BadMessageReceived(); | 138 BadMessageReceived(); |
139 } | 139 } |
140 } | 140 } |
141 } | 141 } |
142 | 142 |
143 void AppCacheDispatcherHost::OnGetResourceList( | 143 void AppCacheDispatcherHost::OnGetResourceList( |
144 int host_id, std::vector<appcache::AppCacheResourceInfo>* params) { | 144 int host_id, std::vector<appcache::AppCacheResourceInfo>* params) { |
145 if (appcache_service_.get()) | 145 if (appcache_service_) |
146 backend_impl_.GetResourceList(host_id, params); | 146 backend_impl_.GetResourceList(host_id, params); |
147 } | 147 } |
148 | 148 |
149 void AppCacheDispatcherHost::OnGetStatus(int host_id, IPC::Message* reply_msg) { | 149 void AppCacheDispatcherHost::OnGetStatus(int host_id, IPC::Message* reply_msg) { |
150 if (pending_reply_msg_.get()) { | 150 if (pending_reply_msg_) { |
151 BadMessageReceived(); | 151 BadMessageReceived(); |
152 delete reply_msg; | 152 delete reply_msg; |
153 return; | 153 return; |
154 } | 154 } |
155 | 155 |
156 pending_reply_msg_.reset(reply_msg); | 156 pending_reply_msg_.reset(reply_msg); |
157 if (appcache_service_.get()) { | 157 if (appcache_service_) { |
158 if (!backend_impl_.GetStatusWithCallback(host_id, get_status_callback_, | 158 if (!backend_impl_.GetStatusWithCallback(host_id, get_status_callback_, |
159 reply_msg)) { | 159 reply_msg)) { |
160 BadMessageReceived(); | 160 BadMessageReceived(); |
161 } | 161 } |
162 return; | 162 return; |
163 } | 163 } |
164 | 164 |
165 GetStatusCallback(appcache::UNCACHED, reply_msg); | 165 GetStatusCallback(appcache::UNCACHED, reply_msg); |
166 } | 166 } |
167 | 167 |
168 void AppCacheDispatcherHost::OnStartUpdate(int host_id, | 168 void AppCacheDispatcherHost::OnStartUpdate(int host_id, |
169 IPC::Message* reply_msg) { | 169 IPC::Message* reply_msg) { |
170 if (pending_reply_msg_.get()) { | 170 if (pending_reply_msg_) { |
171 BadMessageReceived(); | 171 BadMessageReceived(); |
172 delete reply_msg; | 172 delete reply_msg; |
173 return; | 173 return; |
174 } | 174 } |
175 | 175 |
176 pending_reply_msg_.reset(reply_msg); | 176 pending_reply_msg_.reset(reply_msg); |
177 if (appcache_service_.get()) { | 177 if (appcache_service_) { |
178 if (!backend_impl_.StartUpdateWithCallback(host_id, start_update_callback_, | 178 if (!backend_impl_.StartUpdateWithCallback(host_id, start_update_callback_, |
179 reply_msg)) { | 179 reply_msg)) { |
180 BadMessageReceived(); | 180 BadMessageReceived(); |
181 } | 181 } |
182 return; | 182 return; |
183 } | 183 } |
184 | 184 |
185 StartUpdateCallback(false, reply_msg); | 185 StartUpdateCallback(false, reply_msg); |
186 } | 186 } |
187 | 187 |
188 void AppCacheDispatcherHost::OnSwapCache(int host_id, IPC::Message* reply_msg) { | 188 void AppCacheDispatcherHost::OnSwapCache(int host_id, IPC::Message* reply_msg) { |
189 if (pending_reply_msg_.get()) { | 189 if (pending_reply_msg_) { |
190 BadMessageReceived(); | 190 BadMessageReceived(); |
191 delete reply_msg; | 191 delete reply_msg; |
192 return; | 192 return; |
193 } | 193 } |
194 | 194 |
195 pending_reply_msg_.reset(reply_msg); | 195 pending_reply_msg_.reset(reply_msg); |
196 if (appcache_service_.get()) { | 196 if (appcache_service_) { |
197 if (!backend_impl_.SwapCacheWithCallback(host_id, swap_cache_callback_, | 197 if (!backend_impl_.SwapCacheWithCallback(host_id, swap_cache_callback_, |
198 reply_msg)) { | 198 reply_msg)) { |
199 BadMessageReceived(); | 199 BadMessageReceived(); |
200 } | 200 } |
201 return; | 201 return; |
202 } | 202 } |
203 | 203 |
204 SwapCacheCallback(false, reply_msg); | 204 SwapCacheCallback(false, reply_msg); |
205 } | 205 } |
206 | 206 |
(...skipping 13 matching lines...) Expand all Loading... |
220 } | 220 } |
221 | 221 |
222 void AppCacheDispatcherHost::SwapCacheCallback(bool result, void* param) { | 222 void AppCacheDispatcherHost::SwapCacheCallback(bool result, void* param) { |
223 IPC::Message* reply_msg = reinterpret_cast<IPC::Message*>(param); | 223 IPC::Message* reply_msg = reinterpret_cast<IPC::Message*>(param); |
224 DCHECK_EQ(pending_reply_msg_.get(), reply_msg); | 224 DCHECK_EQ(pending_reply_msg_.get(), reply_msg); |
225 AppCacheHostMsg_SwapCache::WriteReplyParams(reply_msg, result); | 225 AppCacheHostMsg_SwapCache::WriteReplyParams(reply_msg, result); |
226 Send(pending_reply_msg_.release()); | 226 Send(pending_reply_msg_.release()); |
227 } | 227 } |
228 | 228 |
229 } // namespace content | 229 } // namespace content |
OLD | NEW |