summaryrefslogtreecommitdiffstats
path: root/content/common
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-07 16:06:03 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-07 16:06:03 +0000
commit2a80aee736e7c21323d2d72aa6ff4255e5b0f72a (patch)
tree2f4683ccc5187c09e7ba5c287f329ab5e9136504 /content/common
parent677016d17792ba1299dd328289d627a806ce9613 (diff)
downloadchromium_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.cc62
-rw-r--r--content/common/url_constants.h13
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_