Index: chrome/browser/ui/browser.cc |
=================================================================== |
--- chrome/browser/ui/browser.cc (revision 91505) |
+++ chrome/browser/ui/browser.cc (working copy) |
@@ -195,6 +195,24 @@ |
const char kHashMark[] = "#"; |
+// Returns |true| if entry has an internal chrome:// URL, |false| otherwise. |
+bool HasInternalURL(const NavigationEntry* entry) { |
+ if (!entry) |
+ return false; |
+ |
+ // Check the |virtual_url()| first. This catches regular chrome:// URLs |
+ // including URLs that were rewritten (such as chrome://bookmarks). |
+ if (entry->virtual_url().SchemeIs(chrome::kChromeUIScheme)) |
+ return true; |
+ |
+ // If the |virtual_url()| isn't a chrome:// URL, check if it's actually |
+ // view-source: of a chrome:// URL. |
+ if (entry->virtual_url().SchemeIs(chrome::kViewSourceScheme)) |
+ return entry->url().SchemeIs(chrome::kChromeUIScheme); |
+ |
+ return false; |
+} |
+ |
} // namespace |
extern bool g_log_bug53991; |
@@ -3978,13 +3996,7 @@ |
command_updater_.UpdateCommandEnabled(IDC_OPEN_FILE, false); |
// Changing the encoding is not possible on Chrome-internal webpages. |
- // Instead of using GetURL here, we use url() (which is the "real" url of the |
- // page) from the NavigationEntry because its reflects their origin rather |
- // than the display one (returned by GetURL) which may be different (like |
- // having "view-source:" on the front). |
- NavigationEntry* active_entry = nc.GetActiveEntry(); |
- bool is_chrome_internal = (active_entry ? |
- active_entry->url().SchemeIs(chrome::kChromeUIScheme) : false); |
+ bool is_chrome_internal = HasInternalURL(nc.GetActiveEntry()); |
command_updater_.UpdateCommandEnabled(IDC_ENCODING_MENU, |
!is_chrome_internal && SavePackage::IsSavableContents( |
current_tab->contents_mime_type())); |