| 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 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 #if defined(OS_WIN) && !defined(USE_AURA) | 390 #if defined(OS_WIN) && !defined(USE_AURA) |
| 391 // If we still have a window handle, destroy it. GetNativeView can return | 391 // If we still have a window handle, destroy it. GetNativeView can return |
| 392 // NULL if this contents was part of a window that closed. | 392 // NULL if this contents was part of a window that closed. |
| 393 if (view_->GetNativeView()) { | 393 if (view_->GetNativeView()) { |
| 394 RenderViewHost* host = GetRenderViewHost(); | 394 RenderViewHost* host = GetRenderViewHost(); |
| 395 if (host && host->GetView()) | 395 if (host && host->GetView()) |
| 396 RenderWidgetHostViewPort::FromRWHV(host->GetView())->WillWmDestroy(); | 396 RenderWidgetHostViewPort::FromRWHV(host->GetView())->WillWmDestroy(); |
| 397 } | 397 } |
| 398 #endif | 398 #endif |
| 399 | 399 |
| 400 // OnCloseStarted isn't called in unit tests. | |
| 401 if (!close_start_time_.is_null()) { | |
| 402 base::TimeTicks now = base::TimeTicks::Now(); | |
| 403 base::TimeDelta close_time = now - close_start_time_; | |
| 404 UMA_HISTOGRAM_TIMES("Tab.Close", close_time); | |
| 405 | |
| 406 base::TimeTicks unload_start_time = close_start_time_; | |
| 407 base::TimeTicks unload_end_time = now; | |
| 408 if (!before_unload_end_time_.is_null()) | |
| 409 unload_start_time = before_unload_end_time_; | |
| 410 if (!unload_detached_start_time_.is_null()) | |
| 411 unload_end_time = unload_detached_start_time_; | |
| 412 base::TimeDelta unload_time = unload_end_time - unload_start_time; | |
| 413 UMA_HISTOGRAM_TIMES("Tab.Close.UnloadTime", unload_time); | |
| 414 | |
| 415 } | |
| 416 | |
| 417 FOR_EACH_OBSERVER(WebContentsObserver, | 400 FOR_EACH_OBSERVER(WebContentsObserver, |
| 418 observers_, | 401 observers_, |
| 419 WebContentsImplDestroyed()); | 402 WebContentsImplDestroyed()); |
| 420 | 403 |
| 421 SetDelegate(NULL); | 404 SetDelegate(NULL); |
| 422 | 405 |
| 423 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(), | 406 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(), |
| 424 destruction_observers_.end()); | 407 destruction_observers_.end()); |
| 425 } | 408 } |
| 426 | 409 |
| (...skipping 1512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1939 | 1922 |
| 1940 void WebContentsImpl::ResetOverrideEncoding() { | 1923 void WebContentsImpl::ResetOverrideEncoding() { |
| 1941 encoding_.clear(); | 1924 encoding_.clear(); |
| 1942 Send(new ViewMsg_ResetPageEncodingToDefault(GetRoutingID())); | 1925 Send(new ViewMsg_ResetPageEncodingToDefault(GetRoutingID())); |
| 1943 } | 1926 } |
| 1944 | 1927 |
| 1945 RendererPreferences* WebContentsImpl::GetMutableRendererPrefs() { | 1928 RendererPreferences* WebContentsImpl::GetMutableRendererPrefs() { |
| 1946 return &renderer_preferences_; | 1929 return &renderer_preferences_; |
| 1947 } | 1930 } |
| 1948 | 1931 |
| 1949 void WebContentsImpl::SetNewTabStartTime(const base::TimeTicks& time) { | |
| 1950 new_tab_start_time_ = time; | |
| 1951 } | |
| 1952 | |
| 1953 base::TimeTicks WebContentsImpl::GetNewTabStartTime() const { | |
| 1954 return new_tab_start_time_; | |
| 1955 } | |
| 1956 | |
| 1957 void WebContentsImpl::Close() { | 1932 void WebContentsImpl::Close() { |
| 1958 Close(GetRenderViewHost()); | 1933 Close(GetRenderViewHost()); |
| 1959 } | 1934 } |
| 1960 | 1935 |
| 1961 void WebContentsImpl::OnCloseStarted() { | |
| 1962 if (close_start_time_.is_null()) | |
| 1963 close_start_time_ = base::TimeTicks::Now(); | |
| 1964 } | |
| 1965 | |
| 1966 void WebContentsImpl::OnCloseCanceled() { | |
| 1967 close_start_time_ = base::TimeTicks(); | |
| 1968 before_unload_end_time_ = base::TimeTicks(); | |
| 1969 unload_detached_start_time_ = base::TimeTicks(); | |
| 1970 } | |
| 1971 | |
| 1972 void WebContentsImpl::OnUnloadStarted() { | |
| 1973 before_unload_end_time_ = base::TimeTicks::Now(); | |
| 1974 } | |
| 1975 | |
| 1976 void WebContentsImpl::OnUnloadDetachedStarted() { | |
| 1977 if (unload_detached_start_time_.is_null()) | |
| 1978 unload_detached_start_time_ = base::TimeTicks::Now(); | |
| 1979 } | |
| 1980 | |
| 1981 void WebContentsImpl::DragSourceEndedAt(int client_x, int client_y, | 1936 void WebContentsImpl::DragSourceEndedAt(int client_x, int client_y, |
| 1982 int screen_x, int screen_y, WebKit::WebDragOperation operation) { | 1937 int screen_x, int screen_y, WebKit::WebDragOperation operation) { |
| 1983 if (browser_plugin_embedder_.get()) | 1938 if (browser_plugin_embedder_.get()) |
| 1984 browser_plugin_embedder_->DragSourceEndedAt(client_x, client_y, | 1939 browser_plugin_embedder_->DragSourceEndedAt(client_x, client_y, |
| 1985 screen_x, screen_y, operation); | 1940 screen_x, screen_y, operation); |
| 1986 if (GetRenderViewHost()) | 1941 if (GetRenderViewHost()) |
| 1987 GetRenderViewHostImpl()->DragSourceEndedAt(client_x, client_y, | 1942 GetRenderViewHostImpl()->DragSourceEndedAt(client_x, client_y, |
| 1988 screen_x, screen_y, operation); | 1943 screen_x, screen_y, operation); |
| 1989 } | 1944 } |
| 1990 | 1945 |
| (...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3493 } | 3448 } |
| 3494 | 3449 |
| 3495 void WebContentsImpl::WorkerCrashed() { | 3450 void WebContentsImpl::WorkerCrashed() { |
| 3496 if (delegate_) | 3451 if (delegate_) |
| 3497 delegate_->WorkerCrashed(this); | 3452 delegate_->WorkerCrashed(this); |
| 3498 } | 3453 } |
| 3499 | 3454 |
| 3500 void WebContentsImpl::BeforeUnloadFiredFromRenderManager( | 3455 void WebContentsImpl::BeforeUnloadFiredFromRenderManager( |
| 3501 bool proceed, const base::TimeTicks& proceed_time, | 3456 bool proceed, const base::TimeTicks& proceed_time, |
| 3502 bool* proceed_to_fire_unload) { | 3457 bool* proceed_to_fire_unload) { |
| 3503 before_unload_end_time_ = proceed_time; | |
| 3504 if (delegate_) | 3458 if (delegate_) |
| 3505 delegate_->BeforeUnloadFired(this, proceed, proceed_to_fire_unload); | 3459 delegate_->BeforeUnloadFired(this, proceed, proceed_to_fire_unload); |
| 3460 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 3461 BeforeUnloadFired(proceed_time)); |
| 3506 } | 3462 } |
| 3507 | 3463 |
| 3508 void WebContentsImpl::RenderViewGoneFromRenderManager( | 3464 void WebContentsImpl::RenderViewGoneFromRenderManager( |
| 3509 RenderViewHost* render_view_host) { | 3465 RenderViewHost* render_view_host) { |
| 3510 DCHECK(crashed_status_ != base::TERMINATION_STATUS_STILL_RUNNING); | 3466 DCHECK(crashed_status_ != base::TERMINATION_STATUS_STILL_RUNNING); |
| 3511 RenderViewTerminated(render_view_host, crashed_status_, crashed_error_code_); | 3467 RenderViewTerminated(render_view_host, crashed_status_, crashed_error_code_); |
| 3512 } | 3468 } |
| 3513 | 3469 |
| 3514 void WebContentsImpl::UpdateRenderViewSizeForRenderManager() { | 3470 void WebContentsImpl::UpdateRenderViewSizeForRenderManager() { |
| 3515 // TODO(brettw) this is a hack. See WebContentsView::SizeContents. | 3471 // TODO(brettw) this is a hack. See WebContentsView::SizeContents. |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3635 | 3591 |
| 3636 void WebContentsImpl::OnDialogClosed(RenderViewHost* rvh, | 3592 void WebContentsImpl::OnDialogClosed(RenderViewHost* rvh, |
| 3637 IPC::Message* reply_msg, | 3593 IPC::Message* reply_msg, |
| 3638 bool success, | 3594 bool success, |
| 3639 const string16& user_input) { | 3595 const string16& user_input) { |
| 3640 if (is_showing_before_unload_dialog_ && !success) { | 3596 if (is_showing_before_unload_dialog_ && !success) { |
| 3641 // If a beforeunload dialog is canceled, we need to stop the throbber from | 3597 // If a beforeunload dialog is canceled, we need to stop the throbber from |
| 3642 // spinning, since we forced it to start spinning in Navigate. | 3598 // spinning, since we forced it to start spinning in Navigate. |
| 3643 DidStopLoading(rvh); | 3599 DidStopLoading(rvh); |
| 3644 controller_.DiscardNonCommittedEntries(); | 3600 controller_.DiscardNonCommittedEntries(); |
| 3645 OnCloseCanceled(); | 3601 |
| 3602 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 3603 BeforeUnloadDialogCancelled()); |
| 3646 } | 3604 } |
| 3647 is_showing_before_unload_dialog_ = false; | 3605 is_showing_before_unload_dialog_ = false; |
| 3648 static_cast<RenderViewHostImpl*>( | 3606 static_cast<RenderViewHostImpl*>( |
| 3649 rvh)->JavaScriptDialogClosed(reply_msg, success, user_input); | 3607 rvh)->JavaScriptDialogClosed(reply_msg, success, user_input); |
| 3650 } | 3608 } |
| 3651 | 3609 |
| 3652 void WebContentsImpl::SetEncoding(const std::string& encoding) { | 3610 void WebContentsImpl::SetEncoding(const std::string& encoding) { |
| 3653 encoding_ = GetContentClient()->browser()-> | 3611 encoding_ = GetContentClient()->browser()-> |
| 3654 GetCanonicalEncodingNameByAliasName(encoding); | 3612 GetCanonicalEncodingNameByAliasName(encoding); |
| 3655 } | 3613 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3698 } | 3656 } |
| 3699 | 3657 |
| 3700 BrowserPluginGuestManager* | 3658 BrowserPluginGuestManager* |
| 3701 WebContentsImpl::GetBrowserPluginGuestManager() const { | 3659 WebContentsImpl::GetBrowserPluginGuestManager() const { |
| 3702 return static_cast<BrowserPluginGuestManager*>( | 3660 return static_cast<BrowserPluginGuestManager*>( |
| 3703 GetBrowserContext()->GetUserData( | 3661 GetBrowserContext()->GetUserData( |
| 3704 browser_plugin::kBrowserPluginGuestManagerKeyName)); | 3662 browser_plugin::kBrowserPluginGuestManagerKeyName)); |
| 3705 } | 3663 } |
| 3706 | 3664 |
| 3707 } // namespace content | 3665 } // namespace content |
| OLD | NEW |