chrome里面的about Scheme

ゝ一世哀愁。 2022-09-30 00:36 266阅读 0赞

对about Scheme进行处理的地方:

D:/project/chrome/src/src/chrome/browser/browser_url_handler.cc的void BrowserURLHandler::InitURLHandlers()函数

  1. // static
  2. void BrowserURLHandler::InitURLHandlers() {
  3. if (!url_handlers_.empty())
  4. return;
  5. // Visual Studio 2010 has problems converting NULL to the null pointer for
  6. // std::pair. See http://connect.microsoft.com/VisualStudio/feedback/details/520043/error-converting-from-null-to-a-pointer-type-in-std-pair
  7. // It will work if we pass nullptr.
  8. #if defined(_MSC_VER) && _MSC_VER >= 1600
  9. URLHandler null_handler = nullptr;
  10. #else
  11. URLHandler null_handler = NULL;
  12. #endif
  13. // Add the default URL handlers.
  14. url_handlers_.push_back(
  15. HandlerPair(&ExtensionWebUI::HandleChromeURLOverride, null_handler));
  16. // about:
  17. url_handlers_.push_back(HandlerPair(&WillHandleBrowserAboutURL,
  18. null_handler));
  19. // chrome: & friends.
  20. url_handlers_.push_back(HandlerPair(&HandleWebUI, null_handler));
  21. // view-source:
  22. url_handlers_.push_back(HandlerPair(&HandleViewSource, &ReverseViewSource));
  23. }

D:/project/chrome/src/src/chrome/browser/browser_about_handler.cc 的bool WillHandleBrowserAboutURL(GURL* url, Profile* profile)

  1. WillHandleBrowserAboutURL
  2. bool WillHandleBrowserAboutURL(GURL* url, Profile* profile) {
  3. // We only handle about: schemes.
  4. if (!url->SchemeIs(chrome::kAboutScheme))
  5. return false;
  6. // about:blank is special. Frames are allowed to access about:blank,
  7. // but they are not allowed to access other types of about pages.
  8. // Just ignore the about:blank and let the TAB_CONTENTS_WEB handle it.
  9. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutBlankURL))
  10. return false;
  11. // Rewrite about:cache/* URLs to chrome://view-http-cache/*
  12. if (StartsWithAboutSpecifier(*url, chrome::kAboutCacheURL)) {
  13. *url = RemapAboutURL(chrome::kNetworkViewCacheURL, *url);
  14. return true;
  15. }
  16. #if defined(OS_WIN)
  17. // Rewrite about:conflicts/* URLs to chrome://conflicts/*
  18. if (StartsWithAboutSpecifier(*url, chrome::kAboutConflicts)) {
  19. *url = GURL(chrome::kChromeUIConflictsURL);
  20. return true;
  21. }
  22. #endif
  23. // Rewrite about:flags to chrome://flags/.
  24. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutFlagsURL)) {
  25. *url = GURL(chrome::kChromeUIFlagsURL);
  26. return true;
  27. }
  28. // Rewrite about:net-internals/* URLs to chrome://net-internals/*
  29. if (StartsWithAboutSpecifier(*url, chrome::kAboutNetInternalsURL)) {
  30. *url = RemapAboutURL(chrome::kNetworkViewInternalsURL, *url);
  31. return true;
  32. }
  33. // Rewrite about:gpu/* URLs to chrome://gpu-internals/*
  34. if (StartsWithAboutSpecifier(*url, chrome::kAboutGpuURL)) {
  35. *url = RemapAboutURL(chrome::kGpuInternalsURL, *url);
  36. return true;
  37. }
  38. // Rewrite about:appcache-internals/* URLs to chrome://appcache/*
  39. if (StartsWithAboutSpecifier(*url, chrome::kAboutAppCacheInternalsURL)) {
  40. *url = RemapAboutURL(chrome::kAppCacheViewInternalsURL, *url);
  41. return true;
  42. }
  43. // Rewrite about:sync-internals/* URLs (and about:sync, too, for
  44. // legacy reasons) to chrome://sync-internals/*
  45. if (StartsWithAboutSpecifier(*url, chrome::kAboutSyncInternalsURL) ||
  46. StartsWithAboutSpecifier(*url, chrome::kAboutSyncURL)) {
  47. *url = RemapAboutURL(chrome::kSyncViewInternalsURL, *url);
  48. return true;
  49. }
  50. // Rewrite about:plugins to chrome://plugins/.
  51. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutPluginsURL)) {
  52. *url = GURL(chrome::kChromeUIPluginsURL);
  53. return true;
  54. }
  55. // Handle URL to crash the browser process.
  56. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutBrowserCrash)) {
  57. // Induce an intentional crash in the browser process.
  58. int* bad_pointer = NULL;
  59. *bad_pointer = 42;
  60. return true;
  61. }
  62. // Handle URLs to wreck the gpu process.
  63. GpuProcessHostUIShim* gpu_ui_shim = GpuProcessHostUIShim::GetForRenderer(0);
  64. if (gpu_ui_shim) {
  65. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutGpuCrashURL)) {
  66. gpu_ui_shim->SendAboutGpuCrash();
  67. return true;
  68. }
  69. if (LowerCaseEqualsASCII(url->spec(), chrome::kAboutGpuHangURL)) {
  70. gpu_ui_shim->SendAboutGpuHang();
  71. return true;
  72. }
  73. }
  74. // There are a few about: URLs that we hand over to the renderer. If the
  75. // renderer wants them, don't do any rewriting.
  76. if (chrome_about_handler::WillHandle(*url))
  77. return false;
  78. // Anything else requires our special handler; make sure it's initialized.
  79. InitializeAboutDataSource(profile);
  80. // Special case about:memory to go through a redirect before ending up on
  81. // the final page. See GetAboutMemoryRedirectResponse above for why.
  82. if (LowerCaseEqualsASCII(url->path(), kMemoryPath)) {
  83. *url = GURL("chrome://about/memory-redirect");
  84. return true;
  85. }
  86. // Rewrite the about URL to use chrome:. WebKit treats all about URLS the
  87. // same (blank page), so if we want to display content, we need another
  88. // scheme.
  89. std::string about_url = "chrome://about/";
  90. about_url.append(url->path());
  91. *url = GURL(about_url);
  92. return true;
  93. }

其中通过about:about可以看到所有支持的about Scheme。 about:net-internals, about:tcmalloc, about:gpu 可以了解很多chrome的细节。
image

这些about scheme的定义在D:/project/chrome/src/src/chrome/common/url_constants.cc :

  1. url_constants.cc
  2. const char kAboutScheme[] = "about";
  3. const char kBlobScheme[] = "blob";
  4. const char kChromeDevToolsScheme[] = "chrome-devtools";
  5. const char kChromeInternalScheme[] = "chrome-internal";
  6. const char kChromeUIScheme[] = "chrome";
  7. const char kDataScheme[] = "data";
  8. const char kExtensionScheme[] = "chrome-extension";
  9. const char kFileScheme[] = "file";
  10. const char kFileSystemScheme[] = "filesystem";
  11. const char kFtpScheme[] = "ftp";
  12. const char kHttpScheme[] = "http";
  13. const char kHttpsScheme[] = "https";
  14. const char kJavaScriptScheme[] = "javascript";
  15. const char kMailToScheme[] = "mailto";
  16. const char kMetadataScheme[] = "metadata";
  17. const char kUserScriptScheme[] = "chrome-user-script";
  18. const char kViewSourceScheme[] = "view-source";
  19. #if defined(OS_CHROMEOS)
  20. const char kCrosScheme[] = "cros";
  21. #endif
  22. const char kStandardSchemeSeparator[] = "://";
  23. const char* kSavableSchemes[] = {
  24. kHttpScheme,
  25. kHttpsScheme,
  26. kFileScheme,
  27. kFtpScheme,
  28. kExtensionScheme,
  29. kChromeDevToolsScheme,
  30. kChromeUIScheme,
  31. NULL
  32. };
  33. const char kAboutAboutURL[] = "about:about";
  34. const char kAboutAppCacheInternalsURL[] = "about:appcache-internals";
  35. const char kAboutBlankURL[] = "about:blank";
  36. const char kAboutCacheURL[] = "about:cache";
  37. const char kAboutConflicts[] = "about:conflicts";
  38. const char kAboutCrashURL[] = "about:crash";
  39. const char kAboutKillURL[] = "about:kill";
  40. const char kAboutCreditsURL[] = "about:credits";
  41. const char kAboutDNSURL[] = "about:dns";
  42. const char kAboutFlagsURL[] = "about:flags";
  43. const char kAboutGpuURL[] = "about:gpu";
  44. const char kAboutGpuCrashURL[] = "about:gpucrash";
  45. const char kAboutGpuHangURL[] = "about:gpuhang";
  46. const char kAboutHangURL[] = "about:hang";
  47. const char kAboutHistogramsURL[] = "about:histograms";
  48. const char kAboutMemoryURL[] = "about:memory";
  49. const char kAboutNetInternalsURL[] = "about:net-internals";
  50. const char kAboutPluginsURL[] = "about:plugins";
  51. const char kAboutShorthangURL[] = "about:shorthang";
  52. const char kAboutSyncURL[] = "about:sync";
  53. const char kAboutSyncInternalsURL[] = "about:sync-internals";
  54. const char kAboutTermsURL[] = "about:terms";
  55. const char kAboutVersionURL[] = "about:version";
  56. // Use an obfuscated URL to make this nondiscoverable, we only want this
  57. // to be used for testing.
  58. const char kAboutBrowserCrash[] = "about:inducebrowsercrashforrealz";
  59. const char kChromeUIAboutAboutURL[] = "chrome://about/about";
  60. const char kChromeUIAboutCreditsURL[] = "chrome://about/credits";
  61. const char kChromeUIAboutURL[] = "chrome://settings/about";
  62. const char kChromeUIAppLauncherURL[] = "chrome://newtab/#mode=app-launcher";
  63. const char kChromeUIBookmarksURL[] = "chrome://bookmarks/";
  64. const char kChromeUIBugReportURL[] = "chrome://bugreport/";
  65. const char kChromeUIConflictsURL[] = "chrome://conflicts/";
  66. const char kChromeUIConstrainedHTMLTestURL[] = "chrome://constrained-test/";
  67. const char kChromeUICrashesURL[] = "chrome://crashes/";
  68. const char kChromeUIDevToolsURL[] = "chrome-devtools://devtools/";
  69. const char kChromeUIDownloadsURL[] = "chrome://downloads/";
  70. const char kChromeUIExtensionIconURL[] = "chrome://extension-icon/";
  71. const char kChromeUIExtensionsURL[] = "chrome://extensions/";
  72. const char kChromeUIFavIconURL[] = "chrome://favicon/";
  73. const char kChromeUIFlagsURL[] = "chrome://flags/";
  74. const char kChromeUIHistory2URL[] = "chrome://history2/";
  75. const char kChromeUIHistoryURL[] = "chrome://history/";
  76. const char kChromeUIIPCURL[] = "chrome://about/ipc";
  77. const char kChromeUIKeyboardURL[] = "chrome://keyboard/";
  78. const char kChromeUINewTabURL[] = "chrome://newtab";
  79. const char kChromeUIPluginsURL[] = "chrome://plugins/";
  80. const char kChromeUIPrintURL[] = "chrome://print/";
  81. const char kChromeUISettingsURL[] = "chrome://settings/";
  82. const char kChromeUITextfieldsURL[] = "chrome://textfields/";
  83. #if defined(OS_CHROMEOS)
  84. const char kChromeUIAboutOSCreditsURL[] = "chrome://about/os-credits";
  85. const char kChromeUIActivationMessage[] = "chrome://activationmessage/";
  86. const char kChromeUIFileBrowseURL[] = "chrome://filebrowse/";
  87. const char kChromeUICollectedCookiesURL[] = "chrome://collected-cookies/";
  88. const char kChromeUIImageBurnerURL[] = "chrome://imageburner/";
  89. const char kChromeUIKeyboardOverlayURL[] = "chrome://keyboardoverlay/";
  90. const char kChromeUIMediaplayerURL[] = "chrome://mediaplayer/";
  91. const char kChromeUIMobileSetupURL[] = "chrome://mobilesetup/";
  92. const char kChromeUIRegisterPageURL[] = "chrome://register/";
  93. const char kChromeUISlideshowURL[] = "chrome://slideshow/";
  94. const char kChromeUISystemInfoURL[] = "chrome://system/";
  95. const char kChromeUIUserImageURL[] = "chrome://userimage/";
  96. #endif
  97. // Keep this list sorted please.
  98. const char kChromeUIBookmarksHost[] = "bookmarks";
  99. const char kChromeUIBugReportHost[] = "bugreport";
  100. const char kChromeUIConflictsHost[] = "conflicts";
  101. const char kChromeUICrashesHost[] = "crashes";
  102. const char kChromeUIDevToolsHost[] = "devtools";
  103. const char kChromeUIDialogHost[] = "dialog";
  104. const char kChromeUIDownloadsHost[] = "downloads";
  105. const char kChromeUIExtensionIconHost[] = "extension-icon";
  106. const char kChromeUIExtensionsHost[] = "extensions";
  107. const char kChromeUIFavIconHost[] = "favicon";
  108. const char kChromeUIFlagsHost[] = "flags";
  109. const char kChromeUIGpuInternalsHost[] = "gpu-internals";
  110. const char kChromeUIHistoryHost[] = "history";
  111. const char kChromeUIHistory2Host[] = "history2";
  112. const char kChromeUIInspectorHost[] = "inspector";
  113. const char kChromeUIKeyboardHost[] = "keyboard";
  114. const char kChromeUINetInternalsHost[] = "net-internals";
  115. const char kChromeUINewTabHost[] = "newtab";
  116. const char kChromeUIPluginsHost[] = "plugins";
  117. const char kChromeUIPrintHost[] = "print";
  118. const char kChromeUIRemotingHost[] = "remoting";
  119. const char kChromeUIRemotingResourcesHost[] = "remotingresources";
  120. const char kChromeUIResourcesHost[] = "resources";
  121. const char kChromeUIScreenshotPath[] = "screenshots";
  122. const char kChromeUISettingsHost[] = "settings";
  123. const char kChromeUISyncInternalsHost[] = "sync-internals";
  124. const char kChromeUISyncResourcesHost[] = "syncresources";
  125. const char kChromeUITextfieldsHost[] = "textfields";
  126. const char kChromeUIThemePath[] = "theme";
  127. const char kChromeUIThumbnailPath[] = "thumb";
  128. #if defined(OS_CHROMEOS)
  129. const char kChromeUIActivationMessageHost[] = "activationmessage";
  130. const char kChromeUICollectedCookiesHost[] = "collected-cookies";
  131. const char kChromeUIFileBrowseHost[] = "filebrowse";
  132. const char kChromeUIImageBurnerHost[] = "imageburner";
  133. const char kChromeUIKeyboardOverlayHost[] = "keyboardoverlay";
  134. const char kChromeUIMediaplayerHost[] = "mediaplayer";
  135. const char kChromeUIMobileSetupHost[] = "mobilesetup";
  136. const char kChromeUIRegisterPageHost[] = "register";
  137. const char kChromeUISlideshowHost[] = "slideshow";
  138. const char kChromeUISystemInfoHost[] = "system";
  139. const char kChromeUIMenu[] = "menu";
  140. const char kChromeUIWrenchMenu[] = "wrench-menu";
  141. const char kChromeUINetworkMenu[] = "network-menu";
  142. const char kChromeUIUserImageHost[] = "userimage";
  143. #endif
  144. #if defined(OS_CHROMEOS) && defined(TOUCH_UI)
  145. const char kChromeUILoginContainerHost[] = "login-container";
  146. const char kChromeUILoginHost[] = "login";
  147. #endif
  148. const char kUnreachableWebDataURL[] = "chrome://chromewebdata/";
  149. const char kAppCacheViewInternalsURL[] = "chrome://appcache-internals/";
  150. const char kBlobViewInternalsURL[] = "chrome://blob-internals/";
  151. const char kCloudPrintResourcesURL[] = "chrome://cloudprintresources/";
  152. const char kCloudPrintResourcesHost[] = "cloudprintresources";
  153. const char kCloudPrintSetupHost[] = "cloudprintsetup";
  154. const char kNetworkViewInternalsURL[] = "chrome://net-internals/";
  155. const char kNetworkViewCacheURL[] = "chrome://view-http-cache/";
  156. const char kSyncViewInternalsURL[] = "chrome://sync-internals/";
  157. // GPU sub pages
  158. const char kGpuInternalsURL[] = "chrome://gpu-internals/";
  159. // Option sub pages.
  160. const char kAdvancedOptionsSubPage[] = "advanced";
  161. const char kAutoFillSubPage[] = "autofill";
  162. const char kBrowserOptionsSubPage[] = "browser";
  163. const char kClearBrowserDataSubPage[] = "clearBrowserData";
  164. const char kContentSettingsSubPage[] = "content";
  165. const char kContentSettingsExceptionsSubPage[] = "contentExceptions";
  166. const char kDefaultOptionsSubPage[] = "";
  167. const char kImportDataSubPage[] = "importData";
  168. const char kInstantConfirmPage[] = "instantConfirm";
  169. const char kLanguageOptionsSubPage[] = "languages";
  170. const char kPersonalOptionsSubPage[] = "personal";
  171. const char kPasswordManagerSubPage[] = "passwords";
  172. const char kSearchEnginesSubPage[] = "searchEngines";
  173. #if defined(OS_CHROMEOS)
  174. const char kInternetOptionsSubPage[] = "internet";
  175. const char kSystemOptionsSubPage[] = "system";
  176. #endif
  177. const char kChromeHelpURL[] =
  178. #if defined(OS_CHROMEOS)
  179. "http://www.google.com/support/chromeos/";
  180. #else
  181. "http://www.google.com/support/chrome/";
  182. #endif
  183. const char kPageInfoHelpCenterURL[] =
  184. #if defined(OS_CHROMEOS)
  185. "http://www.google.com/support/chromeos/bin/answer.py?answer=95617";
  186. #else
  187. "http://www.google.com/support/chrome/bin/answer.py?answer=95617";
  188. #endif
  189. const char kCrashReasonURL[] =
  190. #if defined(OS_CHROMEOS)
  191. "http://www.google.com/support/chromeos/bin/answer.py?answer=1047340";
  192. #else
  193. "http://www.google.com/support/chrome/bin/answer.py?answer=95669";
  194. #endif
  195. // TODO: These are currently placeholders that point to the crash
  196. // docs. See bug http://crosbug.com/10711
  197. const char kKillReasonURL[] =
  198. #if defined(OS_CHROMEOS)
  199. "http://www.google.com/support/chromeos/bin/answer.py?answer=1047340";
  200. #else
  201. "http://www.google.com/support/chrome/bin/answer.py?answer=95669";
  202. #endif
  203. const char kPrivacyLearnMoreURL[] =
  204. #if defined(OS_CHROMEOS)
  205. "http://www.google.com/support/chromeos/bin/answer.py?answer=1047334";
  206. #else
  207. "http://www.google.com/support/chrome/bin/answer.py?answer=114836";
  208. #endif
  209. const char kChromiumProjectURL[] = "http://code.google.com/chromium/";
  210. const char kLearnMoreReportingURL[] =
  211. "http://www.google.com/support/chrome/bin/answer.py?answer=96817";
  212. const char kOutdatedPluginLearnMoreURL[] =
  213. "http://www.google.com/support/chrome/bin/answer.py?answer=1181003";

发表评论

表情:
评论列表 (有 0 条评论,266人围观)

还没有评论,来说两句吧...

相关阅读

    相关 iosURL Scheme

    IOS的应用程序是运行相对独立的沙盒里的,并且在后台的应用大部分处于挂起的状态,这样不同应用的交互就成了一个难题。还好苹果提供了一个URL Scheme协议,可以让不同应用互相

    相关 About me

    自我介绍 我是来自奇妙的东方世界, 一个叫做GR的神奇的地方,而我则是GRYZ的一位菜到不能再菜的小蒟蒻 本人七年级才刚刚知道OI,比起机房dalao们我菜多了...(