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/web_contents/web_contents_impl.h" | 5 #include "content/browser/web_contents/web_contents_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 return true; | 204 return true; |
205 } | 205 } |
206 | 206 |
207 bool ForEachFrameInternal( | 207 bool ForEachFrameInternal( |
208 const base::Callback<void(RenderFrameHost*)>& on_frame, | 208 const base::Callback<void(RenderFrameHost*)>& on_frame, |
209 FrameTreeNode* node) { | 209 FrameTreeNode* node) { |
210 on_frame.Run(node->current_frame_host()); | 210 on_frame.Run(node->current_frame_host()); |
211 return true; | 211 return true; |
212 } | 212 } |
213 | 213 |
214 bool ForEachPendingFrameInternal( | |
215 const base::Callback<void(RenderFrameHost*)>& on_frame, | |
216 FrameTreeNode* node) { | |
217 RenderFrameHost* pending_frame_host = | |
218 node->render_manager()->pending_frame_host(); | |
219 if (pending_frame_host) | |
220 on_frame.Run(pending_frame_host); | |
221 return true; | |
222 } | |
223 | |
224 void SendToAllFramesInternal(IPC::Message* message, RenderFrameHost* rfh) { | 214 void SendToAllFramesInternal(IPC::Message* message, RenderFrameHost* rfh) { |
225 IPC::Message* message_copy = new IPC::Message(*message); | 215 IPC::Message* message_copy = new IPC::Message(*message); |
226 message_copy->set_routing_id(rfh->GetRoutingID()); | 216 message_copy->set_routing_id(rfh->GetRoutingID()); |
227 rfh->Send(message_copy); | 217 rfh->Send(message_copy); |
228 } | 218 } |
229 | 219 |
230 void RunRenderFrameDeleted( | |
231 ObserverList<WebContentsObserver>* observer_list, | |
232 RenderFrameHost* render_frame_host) { | |
233 FOR_EACH_OBSERVER(WebContentsObserver, | |
234 *observer_list, | |
235 RenderFrameDeleted(render_frame_host)); | |
236 } | |
237 | |
238 } // namespace | 220 } // namespace |
239 | 221 |
240 WebContents* WebContents::Create(const WebContents::CreateParams& params) { | 222 WebContents* WebContents::Create(const WebContents::CreateParams& params) { |
241 return WebContentsImpl::CreateWithOpener( | 223 return WebContentsImpl::CreateWithOpener( |
242 params, static_cast<WebContentsImpl*>(params.opener)); | 224 params, static_cast<WebContentsImpl*>(params.opener)); |
243 } | 225 } |
244 | 226 |
245 WebContents* WebContents::CreateWithSessionStorage( | 227 WebContents* WebContents::CreateWithSessionStorage( |
246 const WebContents::CreateParams& params, | 228 const WebContents::CreateParams& params, |
247 const SessionStorageNamespaceMap& session_storage_namespace_map) { | 229 const SessionStorageNamespaceMap& session_storage_namespace_map) { |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 color_chooser_info_->chooser->End(); | 375 color_chooser_info_->chooser->End(); |
394 | 376 |
395 NotifyDisconnected(); | 377 NotifyDisconnected(); |
396 | 378 |
397 // Notify any observer that have a reference on this WebContents. | 379 // Notify any observer that have a reference on this WebContents. |
398 NotificationService::current()->Notify( | 380 NotificationService::current()->Notify( |
399 NOTIFICATION_WEB_CONTENTS_DESTROYED, | 381 NOTIFICATION_WEB_CONTENTS_DESTROYED, |
400 Source<WebContents>(this), | 382 Source<WebContents>(this), |
401 NotificationService::NoDetails()); | 383 NotificationService::NoDetails()); |
402 | 384 |
403 base::Callback<void(RenderFrameHost*)> run_render_frame_deleted_callback = | 385 // Destroy all frame tree nodes except for the root; this notifies observers. |
404 base::Bind(&RunRenderFrameDeleted, base::Unretained(&observers_)); | 386 frame_tree_.ResetForMainFrameSwap(); |
405 frame_tree_.ForEach(base::Bind(&ForEachPendingFrameInternal, | 387 GetRenderManager()->ResetProxyHosts(); |
406 run_render_frame_deleted_callback)); | |
407 | 388 |
408 RenderViewHost* pending_rvh = GetRenderManager()->pending_render_view_host(); | 389 // Manually call the observer methods for the root frame tree node. |
409 if (pending_rvh) { | 390 RenderFrameHostManager* root = GetRenderManager(); |
| 391 if (root->pending_frame_host()) { |
410 FOR_EACH_OBSERVER(WebContentsObserver, | 392 FOR_EACH_OBSERVER(WebContentsObserver, |
411 observers_, | 393 observers_, |
412 RenderViewDeleted(pending_rvh)); | 394 RenderFrameDeleted(root->pending_frame_host())); |
| 395 } |
| 396 FOR_EACH_OBSERVER(WebContentsObserver, |
| 397 observers_, |
| 398 RenderFrameDeleted(root->current_frame_host())); |
| 399 |
| 400 if (root->pending_render_view_host()) { |
| 401 FOR_EACH_OBSERVER(WebContentsObserver, |
| 402 observers_, |
| 403 RenderViewDeleted(root->pending_render_view_host())); |
413 } | 404 } |
414 | 405 |
415 ForEachFrame(run_render_frame_deleted_callback); | 406 FOR_EACH_OBSERVER( |
| 407 WebContentsObserver, observers_, RenderViewDeleted(root->current_host())); |
416 | 408 |
417 FOR_EACH_OBSERVER(WebContentsObserver, | 409 FOR_EACH_OBSERVER(WebContentsObserver, |
418 observers_, | 410 observers_, |
419 RenderViewDeleted(GetRenderManager()->current_host())); | |
420 | |
421 FOR_EACH_OBSERVER(WebContentsObserver, | |
422 observers_, | |
423 WebContentsDestroyed()); | 411 WebContentsDestroyed()); |
424 | 412 |
425 FOR_EACH_OBSERVER(WebContentsObserver, | 413 FOR_EACH_OBSERVER(WebContentsObserver, |
426 observers_, | 414 observers_, |
427 ResetWebContents()); | 415 ResetWebContents()); |
428 | 416 |
429 SetDelegate(NULL); | 417 SetDelegate(NULL); |
430 | 418 |
431 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(), | 419 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(), |
432 destruction_observers_.end()); | 420 destruction_observers_.end()); |
(...skipping 3637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4070 | 4058 |
4071 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { | 4059 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { |
4072 if (!delegate_) | 4060 if (!delegate_) |
4073 return; | 4061 return; |
4074 const gfx::Size new_size = GetPreferredSize(); | 4062 const gfx::Size new_size = GetPreferredSize(); |
4075 if (new_size != old_size) | 4063 if (new_size != old_size) |
4076 delegate_->UpdatePreferredSize(this, new_size); | 4064 delegate_->UpdatePreferredSize(this, new_size); |
4077 } | 4065 } |
4078 | 4066 |
4079 } // namespace content | 4067 } // namespace content |
OLD | NEW |