D:/project/chrome/src/src/chrome/browser/browser_url_handler.cc的void BrowserURLHandler::InitURLHandlers()函数
// staticvoid BrowserURLHandler::InitURLHandlers() { if (!url_handlers_.empty()) return; // Visual Studio 2010 has problems converting NULL to the null pointer for // std::pair. See http://connect.microsoft.com/VisualStudio/feedback/details/520043/error-converting-from-null-to-a-pointer-type-in-std-pair // It will work if we pass nullptr.#if defined(_MSC_VER) && _MSC_VER >= 1600 URLHandler null_handler = nullptr;#else URLHandler null_handler = NULL;#endif // Add the default URL handlers. url_handlers_.push_back( HandlerPair(&ExtensionWebUI::HandleChromeURLOverride, null_handler)); // about: url_handlers_.push_back(HandlerPair(&WillHandleBrowserAboutURL, null_handler)); // chrome: & friends. url_handlers_.push_back(HandlerPair(&HandleWebUI, null_handler)); // view-source: url_handlers_.push_back(HandlerPair(&HandleViewSource, &ReverseViewSource));}
D:/project/chrome/src/src/chrome/browser/browser_about_handler.cc 的bool WillHandleBrowserAboutURL(GURL* url, Profile* profile)
WillHandleBrowserAboutURLbool WillHandleBrowserAboutURL(GURL* url, Profile* profile) { // We only handle about: schemes. if (!url->SchemeIs(chrome::kAboutScheme)) return false; // about:blank is special. Frames are allowed to access about:blank, // but they are not allowed to access other types of about pages. // Just ignore the about:blank and let the TAB_CONTENTS_WEB handle it. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutBlankURL)) return false; // Rewrite about:cache/* URLs to chrome://view-http-cache/* if (StartsWithAboutSpecifier(*url, chrome::kAboutCacheURL)) { *url = RemapAboutURL(chrome::kNetworkViewCacheURL, *url); return true; }#if defined(OS_WIN) // Rewrite about:conflicts/* URLs to chrome://conflicts/* if (StartsWithAboutSpecifier(*url, chrome::kAboutConflicts)) { *url = GURL(chrome::kChromeUIConflictsURL); return true; }#endif // Rewrite about:flags to chrome://flags/. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutFlagsURL)) { *url = GURL(chrome::kChromeUIFlagsURL); return true; } // Rewrite about:net-internals/* URLs to chrome://net-internals/* if (StartsWithAboutSpecifier(*url, chrome::kAboutNetInternalsURL)) { *url = RemapAboutURL(chrome::kNetworkViewInternalsURL, *url); return true; } // Rewrite about:gpu/* URLs to chrome://gpu-internals/* if (StartsWithAboutSpecifier(*url, chrome::kAboutGpuURL)) { *url = RemapAboutURL(chrome::kGpuInternalsURL, *url); return true; } // Rewrite about:appcache-internals/* URLs to chrome://appcache/* if (StartsWithAboutSpecifier(*url, chrome::kAboutAppCacheInternalsURL)) { *url = RemapAboutURL(chrome::kAppCacheViewInternalsURL, *url); return true; } // Rewrite about:sync-internals/* URLs (and about:sync, too, for // legacy reasons) to chrome://sync-internals/* if (StartsWithAboutSpecifier(*url, chrome::kAboutSyncInternalsURL) || StartsWithAboutSpecifier(*url, chrome::kAboutSyncURL)) { *url = RemapAboutURL(chrome::kSyncViewInternalsURL, *url); return true; } // Rewrite about:plugins to chrome://plugins/. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutPluginsURL)) { *url = GURL(chrome::kChromeUIPluginsURL); return true; } // Handle URL to crash the browser process. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutBrowserCrash)) { // Induce an intentional crash in the browser process. int* bad_pointer = NULL; *bad_pointer = 42; return true; } // Handle URLs to wreck the gpu process. GpuProcessHostUIShim* gpu_ui_shim = GpuProcessHostUIShim::GetForRenderer(0); if (gpu_ui_shim) { if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutGpuCrashURL)) { gpu_ui_shim->SendAboutGpuCrash(); return true; } if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutGpuHangURL)) { gpu_ui_shim->SendAboutGpuHang(); return true; } } // There are a few about: URLs that we hand over to the renderer. If the // renderer wants them, don't do any rewriting. if (chrome_about_handler::WillHandle(*url)) return false; // Anything else requires our special handler; make sure it's initialized. InitializeAboutDataSource(profile); // Special case about:memory to go through a redirect before ending up on // the final page. See GetAboutMemoryRedirectResponse above for why. if (LowerCaseEqualsASCII(url->path(), kMemoryPath)) { *url = GURL("chrome://about/memory-redirect"); return true; } // Rewrite the about URL to use chrome:. WebKit treats all about URLS the // same (blank page), so if we want to display content, we need another // scheme. std::string about_url = "chrome://about/"; about_url.append(url->path()); *url = GURL(about_url); return true;}
其中通过about:about可以看到所有支持的about Scheme。about:net-internals,about:tcmalloc,about:gpu 可以了解很多chrome的细节。
url_constants.ccconst char kAboutScheme[] = "about";const char kBlobScheme[] = "blob";const char kChromeDevToolsScheme[] = "chrome-devtools";const char kChromeInternalScheme[] = "chrome-internal";const char kChromeUIScheme[] = "chrome";const char kDataScheme[] = "data";const char kExtensionScheme[] = "chrome-extension";const char kFileScheme[] = "file";const char kFileSystemScheme[] = "filesystem";const char kFtpScheme[] = "ftp";const char kHttpScheme[] = "http";const char kHttpsScheme[] = "https";const char kJavaScriptScheme[] = "javascript";const char kMailToScheme[] = "mailto";const char kMetadataScheme[] = "metadata";const char kUserScriptScheme[] = "chrome-user-script";const char kViewSourceScheme[] = "view-source";#if defined(OS_CHROMEOS)const char kCrosScheme[] = "cros";#endifconst char kStandardSchemeSeparator[] = "://";const char* kSavableSchemes[] = { kHttpScheme, kHttpsScheme, kFileScheme, kFtpScheme, kExtensionScheme, kChromeDevToolsScheme, kChromeUIScheme, NULL};const char kAboutAboutURL[] = "about:about";const char kAboutAppCacheInternalsURL[] = "about:appcache-internals";const char kAboutBlankURL[] = "about:blank";const char kAboutCacheURL[] = "about:cache";const char kAboutConflicts[] = "about:conflicts";const char kAboutCrashURL[] = "about:crash";const char kAboutKillURL[] = "about:kill";const char kAboutCreditsURL[] = "about:credits";const char kAboutDNSURL[] = "about:dns";const char kAboutFlagsURL[] = "about:flags";const char kAboutGpuURL[] = "about:gpu";const char kAboutGpuCrashURL[] = "about:gpucrash";const char kAboutGpuHangURL[] = "about:gpuhang";const char kAboutHangURL[] = "about:hang";const char kAboutHistogramsURL[] = "about:histograms";const char kAboutMemoryURL[] = "about:memory";const char kAboutNetInternalsURL[] = "about:net-internals";const char kAboutPluginsURL[] = "about:plugins";const char kAboutShorthangURL[] = "about:shorthang";const char kAboutSyncURL[] = "about:sync";const char kAboutSyncInternalsURL[] = "about:sync-internals";const char kAboutTermsURL[] = "about:terms";const char kAboutVersionURL[] = "about:version";// Use an obfuscated URL to make this nondiscoverable, we only want this// to be used for testing.const char kAboutBrowserCrash[] = "about:inducebrowsercrashforrealz";const char kChromeUIAboutAboutURL[] = "chrome://about/about";const char kChromeUIAboutCreditsURL[] = "chrome://about/credits";const char kChromeUIAboutURL[] = "chrome://settings/about";const char kChromeUIAppLauncherURL[] = "chrome://newtab/#mode=app-launcher";const char kChromeUIBookmarksURL[] = "chrome://bookmarks/";const char kChromeUIBugReportURL[] = "chrome://bugreport/";const char kChromeUIConflictsURL[] = "chrome://conflicts/";const char kChromeUIConstrainedHTMLTestURL[] = "chrome://constrained-test/";const char kChromeUICrashesURL[] = "chrome://crashes/";const char kChromeUIDevToolsURL[] = "chrome-devtools://devtools/";const char kChromeUIDownloadsURL[] = "chrome://downloads/";const char kChromeUIExtensionIconURL[] = "chrome://extension-icon/";const char kChromeUIExtensionsURL[] = "chrome://extensions/";const char kChromeUIFavIconURL[] = "chrome://favicon/";const char kChromeUIFlagsURL[] = "chrome://flags/";const char kChromeUIHistory2URL[] = "chrome://history2/";const char kChromeUIHistoryURL[] = "chrome://history/";const char kChromeUIIPCURL[] = "chrome://about/ipc";const char kChromeUIKeyboardURL[] = "chrome://keyboard/";const char kChromeUINewTabURL[] = "chrome://newtab";const char kChromeUIPluginsURL[] = "chrome://plugins/";const char kChromeUIPrintURL[] = "chrome://print/";const char kChromeUISettingsURL[] = "chrome://settings/";const char kChromeUITextfieldsURL[] = "chrome://textfields/";#if defined(OS_CHROMEOS)const char kChromeUIAboutOSCreditsURL[] = "chrome://about/os-credits";const char kChromeUIActivationMessage[] = "chrome://activationmessage/";const char kChromeUIFileBrowseURL[] = "chrome://filebrowse/";const char kChromeUICollectedCookiesURL[] = "chrome://collected-cookies/";const char kChromeUIImageBurnerURL[] = "chrome://imageburner/";const char kChromeUIKeyboardOverlayURL[] = "chrome://keyboardoverlay/";const char kChromeUIMediaplayerURL[] = "chrome://mediaplayer/";const char kChromeUIMobileSetupURL[] = "chrome://mobilesetup/";const char kChromeUIRegisterPageURL[] = "chrome://register/";const char kChromeUISlideshowURL[] = "chrome://slideshow/";const char kChromeUISystemInfoURL[] = "chrome://system/";const char kChromeUIUserImageURL[] = "chrome://userimage/";#endif// Keep this list sorted please.const char kChromeUIBookmarksHost[] = "bookmarks";const char kChromeUIBugReportHost[] = "bugreport";const char kChromeUIConflictsHost[] = "conflicts";const char kChromeUICrashesHost[] = "crashes";const char kChromeUIDevToolsHost[] = "devtools";const char kChromeUIDialogHost[] = "dialog";const char kChromeUIDownloadsHost[] = "downloads";const char kChromeUIExtensionIconHost[] = "extension-icon";const char kChromeUIExtensionsHost[] = "extensions";const char kChromeUIFavIconHost[] = "favicon";const char kChromeUIFlagsHost[] = "flags";const char kChromeUIGpuInternalsHost[] = "gpu-internals";const char kChromeUIHistoryHost[] = "history";const char kChromeUIHistory2Host[] = "history2";const char kChromeUIInspectorHost[] = "inspector";const char kChromeUIKeyboardHost[] = "keyboard";const char kChromeUINetInternalsHost[] = "net-internals";const char kChromeUINewTabHost[] = "newtab";const char kChromeUIPluginsHost[] = "plugins";const char kChromeUIPrintHost[] = "print";const char kChromeUIRemotingHost[] = "remoting";const char kChromeUIRemotingResourcesHost[] = "remotingresources";const char kChromeUIResourcesHost[] = "resources";const char kChromeUIScreenshotPath[] = "screenshots";const char kChromeUISettingsHost[] = "settings";const char kChromeUISyncInternalsHost[] = "sync-internals";const char kChromeUISyncResourcesHost[] = "syncresources";const char kChromeUITextfieldsHost[] = "textfields";const char kChromeUIThemePath[] = "theme";const char kChromeUIThumbnailPath[] = "thumb";#if defined(OS_CHROMEOS)const char kChromeUIActivationMessageHost[] = "activationmessage";const char kChromeUICollectedCookiesHost[] = "collected-cookies";const char kChromeUIFileBrowseHost[] = "filebrowse";const char kChromeUIImageBurnerHost[] = "imageburner";const char kChromeUIKeyboardOverlayHost[] = "keyboardoverlay";const char kChromeUIMediaplayerHost[] = "mediaplayer";const char kChromeUIMobileSetupHost[] = "mobilesetup";const char kChromeUIRegisterPageHost[] = "register";const char kChromeUISlideshowHost[] = "slideshow";const char kChromeUISystemInfoHost[] = "system";const char kChromeUIMenu[] = "menu";const char kChromeUIWrenchMenu[] = "wrench-menu";const char kChromeUINetworkMenu[] = "network-menu";const char kChromeUIUserImageHost[] = "userimage";#endif#if defined(OS_CHROMEOS) && defined(TOUCH_UI)const char kChromeUILoginContainerHost[] = "login-container";const char kChromeUILoginHost[] = "login";#endifconst char kUnreachableWebDataURL[] = "chrome://chromewebdata/";const char kAppCacheViewInternalsURL[] = "chrome://appcache-internals/";const char kBlobViewInternalsURL[] = "chrome://blob-internals/";const char kCloudPrintResourcesURL[] = "chrome://cloudprintresources/";const char kCloudPrintResourcesHost[] = "cloudprintresources";const char kCloudPrintSetupHost[] = "cloudprintsetup";const char kNetworkViewInternalsURL[] = "chrome://net-internals/";const char kNetworkViewCacheURL[] = "chrome://view-http-cache/";const char kSyncViewInternalsURL[] = "chrome://sync-internals/";// GPU sub pagesconst char kGpuInternalsURL[] = "chrome://gpu-internals/";// Option sub pages.const char kAdvancedOptionsSubPage[] = "advanced";const char kAutoFillSubPage[] = "autofill";const char kBrowserOptionsSubPage[] = "browser";const char kClearBrowserDataSubPage[] = "clearBrowserData";const char kContentSettingsSubPage[] = "content";const char kContentSettingsExceptionsSubPage[] = "contentExceptions";const char kDefaultOptionsSubPage[] = "";const char kImportDataSubPage[] = "importData";const char kInstantConfirmPage[] = "instantConfirm";const char kLanguageOptionsSubPage[] = "languages";const char kPersonalOptionsSubPage[] = "personal";const char kPasswordManagerSubPage[] = "passwords";const char kSearchEnginesSubPage[] = "searchEngines";#if defined(OS_CHROMEOS)const char kInternetOptionsSubPage[] = "internet";const char kSystemOptionsSubPage[] = "system";#endifconst char kChromeHelpURL[] =#if defined(OS_CHROMEOS) "http://www.google.com/support/chromeos/";#else "http://www.google.com/support/chrome/";#endif const char kPageInfoHelpCenterURL[] =#if defined(OS_CHROMEOS) "http://www.google.com/support/chromeos/bin/answer.py?answer=95617";#else "http://www.google.com/support/chrome/bin/answer.py?answer=95617";#endifconst char kCrashReasonURL[] =#if defined(OS_CHROMEOS) "http://www.google.com/support/chromeos/bin/answer.py?answer=1047340";#else "http://www.google.com/support/chrome/bin/answer.py?answer=95669";#endif// TODO: These are currently placeholders that point to the crash// docs. See bug http://crosbug.com/10711const char kKillReasonURL[] =#if defined(OS_CHROMEOS) "http://www.google.com/support/chromeos/bin/answer.py?answer=1047340";#else "http://www.google.com/support/chrome/bin/answer.py?answer=95669";#endifconst char kPrivacyLearnMoreURL[] =#if defined(OS_CHROMEOS) "http://www.google.com/support/chromeos/bin/answer.py?answer=1047334";#else "http://www.google.com/support/chrome/bin/answer.py?answer=114836";#endifconst char kChromiumProjectURL[] = "http://code.google.com/chromium/";const char kLearnMoreReportingURL[] = "http://www.google.com/support/chrome/bin/answer.py?answer=96817";const char kOutdatedPluginLearnMoreURL[] = "http://www.google.com/support/chrome/bin/answer.py?answer=1181003";