diff options
author | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-07 16:06:03 +0000 |
---|---|---|
committer | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-07 16:06:03 +0000 |
commit | 2a80aee736e7c21323d2d72aa6ff4255e5b0f72a (patch) | |
tree | 2f4683ccc5187c09e7ba5c287f329ab5e9136504 /content/common | |
parent | 677016d17792ba1299dd328289d627a806ce9613 (diff) | |
download | chromium_src-2a80aee736e7c21323d2d72aa6ff4255e5b0f72a.zip chromium_src-2a80aee736e7c21323d2d72aa6ff4255e5b0f72a.tar.gz chromium_src-2a80aee736e7c21323d2d72aa6ff4255e5b0f72a.tar.bz2 |
Move kExtensionScheme from content to chrome
BUG=89642
TEST=everything still works
Review URL: http://codereview.chromium.org/8159006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104492 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/common')
-rw-r--r-- | content/common/url_constants.cc | 62 | ||||
-rw-r--r-- | content/common/url_constants.h | 13 |
2 files changed, 60 insertions, 15 deletions
diff --git a/content/common/url_constants.cc b/content/common/url_constants.cc index 065ea07..442b52d 100644 --- a/content/common/url_constants.cc +++ b/content/common/url_constants.cc @@ -4,20 +4,23 @@ #include "content/common/url_constants.h" -#include <stdio.h> +#include "base/string_util.h" +#include "googleurl/src/url_util.h" -namespace chrome { - -const char* kSavableSchemes[] = { - kHttpScheme, - kHttpsScheme, - kFileScheme, - kFtpScheme, - kExtensionScheme, - kChromeDevToolsScheme, - kChromeUIScheme, +namespace { +const char* kDefaultSavableSchemes[] = { + chrome::kHttpScheme, + chrome::kHttpsScheme, + chrome::kFileScheme, + chrome::kFtpScheme, + chrome::kChromeDevToolsScheme, + chrome::kChromeUIScheme, NULL }; +char** g_savable_schemes = const_cast<char**>(kDefaultSavableSchemes); +} // namespace + +namespace chrome { const char kAboutScheme[] = "about"; const char kBlobScheme[] = "blob"; @@ -28,7 +31,6 @@ 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"; @@ -46,4 +48,40 @@ const char kAboutCrashURL[] = "about:crash"; const char kUnreachableWebDataURL[] = "chrome://chromewebdata/"; +const char** GetSavableSchemes() { + return const_cast<const char**>(g_savable_schemes); +} + +void RegisterContentSchemes(const char** additional_savable_schemes) { + // Don't need "chrome-internal" which was used in old versions of Chrome for + // the new tab page. + url_util::AddStandardScheme(kChromeDevToolsScheme); + url_util::AddStandardScheme(kChromeUIScheme); + url_util::AddStandardScheme(kMetadataScheme); + + // Prevent future modification of the standard schemes list. This is to + // prevent accidental creation of data races in the program. AddStandardScheme + // isn't threadsafe so must be called when GURL isn't used on any other + // thread. This is really easy to mess up, so we say that all calls to + // AddStandardScheme in Chrome must be inside this function. + url_util::LockStandardSchemes(); + + // We rely on the above lock to protect this part from being invoked twice. + if (additional_savable_schemes) { + int schemes = 0; + while (additional_savable_schemes[++schemes]); + // The array, and the copied schemes won't be freed, but will remain + // reachable. + g_savable_schemes = new char*[schemes + arraysize(kDefaultSavableSchemes)]; + memcpy(g_savable_schemes, + kDefaultSavableSchemes, + arraysize(kDefaultSavableSchemes) * sizeof(char*)); + for (int i = 0; i < schemes; ++i) { + g_savable_schemes[arraysize(kDefaultSavableSchemes) + i - 1] = + base::strdup(additional_savable_schemes[i]); + } + g_savable_schemes[arraysize(kDefaultSavableSchemes) + schemes - 1] = 0; + } +} + } // namespace chrome diff --git a/content/common/url_constants.h b/content/common/url_constants.h index 801f1abd..f00460a 100644 --- a/content/common/url_constants.h +++ b/content/common/url_constants.h @@ -12,8 +12,9 @@ namespace chrome { -// Null terminated list of schemes that are savable. -extern const char* kSavableSchemes[]; +// Null terminated list of schemes that are savable. This function can be +// invoked on any thread. +const char** GetSavableSchemes(); // Canonical schemes you can use as input to GURL.SchemeIs(). // TODO(jam): some of these don't below in the content layer, but are accessed @@ -25,7 +26,6 @@ CONTENT_EXPORT extern const char kChromeInternalScheme[]; CONTENT_EXPORT extern const char kChromeUIScheme[]; // Used for WebUIs. CONTENT_EXPORT extern const char kCrosScheme[]; // Used for ChromeOS. CONTENT_EXPORT extern const char kDataScheme[]; -CONTENT_EXPORT extern const char kExtensionScheme[]; CONTENT_EXPORT extern const char kFileScheme[]; CONTENT_EXPORT extern const char kFileSystemScheme[]; CONTENT_EXPORT extern const char kFtpScheme[]; @@ -46,6 +46,13 @@ CONTENT_EXPORT extern const char kAboutCrashURL[]; // Special URL used to start a navigation to an error page. extern const char kUnreachableWebDataURL[]; +// Call near the beginning of startup to register the content layer's internal +// URLs that should be parsed as "standard" with the googleurl library. The +// embedder can pass a 0-terminated list of additional schemes that should be +// savable, or NULL if the standard list is sufficient. +void CONTENT_EXPORT RegisterContentSchemes( + const char** additional_savable_schemes); + } // namespace chrome #endif // CONTENT_COMMON_URL_CONSTANTS_H_ |