Index: chrome/browser/ui/tab_contents/core_tab_helper.cc |
diff --git a/chrome/browser/ui/tab_contents/core_tab_helper.cc b/chrome/browser/ui/tab_contents/core_tab_helper.cc |
index 78b13a62a11dccc791be96eb812b825cba56bd58..07a12199995fb23f448fcd72d223e64898a49b81 100644 |
--- a/chrome/browser/ui/tab_contents/core_tab_helper.cc |
+++ b/chrome/browser/ui/tab_contents/core_tab_helper.cc |
@@ -24,6 +24,7 @@ |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/web_contents.h" |
+#include "extensions/browser/guest_view/guest_view_manager.h" |
#include "net/base/load_states.h" |
#include "net/http/http_request_headers.h" |
#include "ui/base/l10n/l10n_util.h" |
@@ -46,62 +47,9 @@ base::string16 CoreTabHelper::GetDefaultTitle() { |
} |
base::string16 CoreTabHelper::GetStatusText() const { |
- if (!web_contents()->IsLoading() || |
- web_contents()->GetLoadState().state == net::LOAD_STATE_IDLE) { |
- return base::string16(); |
- } |
- |
- switch (web_contents()->GetLoadState().state) { |
- case net::LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL: |
- case net::LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_WAITING_FOR_SOCKET_SLOT); |
- case net::LOAD_STATE_WAITING_FOR_DELEGATE: |
- if (!web_contents()->GetLoadState().param.empty()) { |
- return l10n_util::GetStringFUTF16(IDS_LOAD_STATE_WAITING_FOR_DELEGATE, |
- web_contents()->GetLoadState().param); |
- } else { |
- return l10n_util::GetStringUTF16( |
- IDS_LOAD_STATE_WAITING_FOR_DELEGATE_GENERIC); |
- } |
- case net::LOAD_STATE_WAITING_FOR_CACHE: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_WAITING_FOR_CACHE); |
- case net::LOAD_STATE_WAITING_FOR_APPCACHE: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_WAITING_FOR_APPCACHE); |
- case net::LOAD_STATE_ESTABLISHING_PROXY_TUNNEL: |
- return |
- l10n_util::GetStringUTF16(IDS_LOAD_STATE_ESTABLISHING_PROXY_TUNNEL); |
- case net::LOAD_STATE_DOWNLOADING_PROXY_SCRIPT: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_DOWNLOADING_PROXY_SCRIPT); |
- case net::LOAD_STATE_RESOLVING_PROXY_FOR_URL: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_RESOLVING_PROXY_FOR_URL); |
- case net::LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT: |
- return l10n_util::GetStringUTF16( |
- IDS_LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT); |
- case net::LOAD_STATE_RESOLVING_HOST: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_RESOLVING_HOST); |
- case net::LOAD_STATE_CONNECTING: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_CONNECTING); |
- case net::LOAD_STATE_SSL_HANDSHAKE: |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_SSL_HANDSHAKE); |
- case net::LOAD_STATE_SENDING_REQUEST: |
- if (web_contents()->GetUploadSize()) { |
- return l10n_util::GetStringFUTF16Int( |
- IDS_LOAD_STATE_SENDING_REQUEST_WITH_PROGRESS, |
- static_cast<int>((100 * web_contents()->GetUploadPosition()) / |
- web_contents()->GetUploadSize())); |
- } else { |
- return l10n_util::GetStringUTF16(IDS_LOAD_STATE_SENDING_REQUEST); |
- } |
- case net::LOAD_STATE_WAITING_FOR_RESPONSE: |
- return l10n_util::GetStringFUTF16(IDS_LOAD_STATE_WAITING_FOR_RESPONSE, |
- web_contents()->GetLoadStateHost()); |
- // Ignore net::LOAD_STATE_READING_RESPONSE and net::LOAD_STATE_IDLE |
- case net::LOAD_STATE_IDLE: |
- case net::LOAD_STATE_READING_RESPONSE: |
- break; |
- } |
- |
- return base::string16(); |
+ base::string16 status_text; |
+ GetStatusTextForWebContents(&status_text, web_contents()); |
+ return status_text; |
} |
void CoreTabHelper::OnCloseStarted() { |
@@ -135,6 +83,96 @@ void CoreTabHelper::UpdateContentRestrictions(int content_restrictions) { |
#endif |
} |
+// static |
+bool CoreTabHelper::GetStatusTextForWebContents( |
+ base::string16* status_text, content::WebContents* source) { |
+ auto guest_manager = extensions::GuestViewManager::FromBrowserContext( |
+ source->GetBrowserContext()); |
+ if (!source->IsLoading() || |
+ source->GetLoadState().state == net::LOAD_STATE_IDLE) { |
+ return guest_manager->ForEachGuest( |
+ source, base::Bind(&CoreTabHelper::GetStatusTextForWebContents, |
sky
2015/01/29 23:44:18
This call (and 172ish) looks expensive. How often
Fady Samuel
2015/01/30 05:43:56
GuestViewManagers are created on first access. I g
|
+ status_text)); |
+ } |
+ |
+ switch (source->GetLoadState().state) { |
+ case net::LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL: |
+ case net::LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET: |
+ *status_text = |
+ l10n_util::GetStringUTF16(IDS_LOAD_STATE_WAITING_FOR_SOCKET_SLOT); |
+ return true; |
+ case net::LOAD_STATE_WAITING_FOR_DELEGATE: |
+ if (!source->GetLoadState().param.empty()) { |
+ *status_text = l10n_util::GetStringFUTF16( |
+ IDS_LOAD_STATE_WAITING_FOR_DELEGATE, |
+ source->GetLoadState().param); |
+ return true; |
+ } else { |
+ *status_text = l10n_util::GetStringUTF16( |
+ IDS_LOAD_STATE_WAITING_FOR_DELEGATE_GENERIC); |
+ return true; |
+ } |
+ case net::LOAD_STATE_WAITING_FOR_CACHE: |
+ *status_text = |
+ l10n_util::GetStringUTF16(IDS_LOAD_STATE_WAITING_FOR_CACHE); |
+ return true; |
+ case net::LOAD_STATE_WAITING_FOR_APPCACHE: |
+ *status_text = |
+ l10n_util::GetStringUTF16(IDS_LOAD_STATE_WAITING_FOR_APPCACHE); |
+ return true; |
+ case net::LOAD_STATE_ESTABLISHING_PROXY_TUNNEL: |
+ *status_text = |
+ l10n_util::GetStringUTF16(IDS_LOAD_STATE_ESTABLISHING_PROXY_TUNNEL); |
+ return true; |
+ case net::LOAD_STATE_DOWNLOADING_PROXY_SCRIPT: |
+ *status_text = |
+ l10n_util::GetStringUTF16(IDS_LOAD_STATE_DOWNLOADING_PROXY_SCRIPT); |
+ return true; |
+ case net::LOAD_STATE_RESOLVING_PROXY_FOR_URL: |
+ *status_text = |
+ l10n_util::GetStringUTF16(IDS_LOAD_STATE_RESOLVING_PROXY_FOR_URL); |
+ return true; |
+ case net::LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT: |
+ *status_text = l10n_util::GetStringUTF16( |
+ IDS_LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT); |
+ return true; |
+ case net::LOAD_STATE_RESOLVING_HOST: |
+ *status_text = l10n_util::GetStringUTF16(IDS_LOAD_STATE_RESOLVING_HOST); |
+ return true; |
+ case net::LOAD_STATE_CONNECTING: |
+ *status_text = l10n_util::GetStringUTF16(IDS_LOAD_STATE_CONNECTING); |
+ return true; |
+ case net::LOAD_STATE_SSL_HANDSHAKE: |
+ *status_text = l10n_util::GetStringUTF16(IDS_LOAD_STATE_SSL_HANDSHAKE); |
+ return true; |
+ case net::LOAD_STATE_SENDING_REQUEST: |
+ if (source->GetUploadSize()) { |
+ *status_text = l10n_util::GetStringFUTF16Int( |
+ IDS_LOAD_STATE_SENDING_REQUEST_WITH_PROGRESS, |
+ static_cast<int>((100 * source->GetUploadPosition()) / |
+ source->GetUploadSize())); |
+ return true; |
+ } else { |
+ *status_text = |
+ l10n_util::GetStringUTF16(IDS_LOAD_STATE_SENDING_REQUEST); |
+ return true; |
+ } |
+ case net::LOAD_STATE_WAITING_FOR_RESPONSE: |
+ *status_text = |
+ l10n_util::GetStringFUTF16(IDS_LOAD_STATE_WAITING_FOR_RESPONSE, |
+ source->GetLoadStateHost()); |
+ return true; |
+ // Ignore net::LOAD_STATE_READING_RESPONSE and net::LOAD_STATE_IDLE |
+ case net::LOAD_STATE_IDLE: |
+ case net::LOAD_STATE_READING_RESPONSE: |
+ break; |
+ } |
+ |
+ return guest_manager->ForEachGuest( |
+ source, base::Bind(&CoreTabHelper::GetStatusTextForWebContents, |
+ status_text)); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// WebContentsObserver overrides |