Chromium Code Reviews| Index: content/public/common/url_constants.cc |
| =================================================================== |
| --- content/public/common/url_constants.cc (revision 132480) |
| +++ content/public/common/url_constants.cc (working copy) |
| @@ -4,7 +4,10 @@ |
| #include "content/public/common/url_constants.h" |
| +#include <algorithm> |
| + |
| #include "base/string_util.h" |
| +#include "content/public/common/content_client.h" |
| #include "googleurl/src/url_util.h" |
| namespace { |
| @@ -19,6 +22,11 @@ |
| NULL |
| }; |
| char** g_savable_schemes = const_cast<char**>(kDefaultSavableSchemes); |
| + |
| +void AddStandardSchemeHelper(const std::string& scheme) { |
| + url_util::AddStandardScheme(scheme.c_str()); |
| +} |
| + |
| } // namespace |
| namespace chrome { |
| @@ -76,24 +84,35 @@ |
| return const_cast<const char**>(g_savable_schemes); |
| } |
| -void RegisterContentSchemes(const char** additional_savable_schemes) { |
| +void RegisterContentSchemes(bool lock_standard_schemes) { |
| + std::vector<std::string> additional_standard_schemes; |
| + std::vector<std::string> additional_savable_schemes; |
| + if (GetContentClient()) { |
|
jam
2012/04/17 03:30:10
we don't usually null check GetContentClient by de
michaeln
2012/04/17 04:08:26
I noticed that. Yes, this is for content_unittest
|
| + GetContentClient()->AddAdditionalSchemes( |
| + &additional_standard_schemes, |
| + &additional_savable_schemes); |
| + } |
| + |
| // Don't need "chrome-internal" which was used in old versions of Chrome for |
| // the new tab page. |
| url_util::AddStandardScheme(chrome::kChromeDevToolsScheme); |
| url_util::AddStandardScheme(chrome::kChromeUIScheme); |
| url_util::AddStandardScheme(chrome::kMetadataScheme); |
| + std::for_each(additional_standard_schemes.begin(), |
| + additional_standard_schemes.end(), |
| + AddStandardSchemeHelper); |
| // 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(); |
| + if (lock_standard_schemes) |
| + 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]); |
| + if (!additional_savable_schemes.empty()) { |
| + int schemes = static_cast<int>(additional_savable_schemes.size()); |
| // The array, and the copied schemes won't be freed, but will remain |
| // reachable. |
| g_savable_schemes = new char*[schemes + arraysize(kDefaultSavableSchemes)]; |
| @@ -102,7 +121,7 @@ |
| arraysize(kDefaultSavableSchemes) * sizeof(char*)); |
| for (int i = 0; i < schemes; ++i) { |
| g_savable_schemes[arraysize(kDefaultSavableSchemes) + i - 1] = |
| - base::strdup(additional_savable_schemes[i]); |
| + base::strdup(additional_savable_schemes[i].c_str()); |
| } |
| g_savable_schemes[arraysize(kDefaultSavableSchemes) + schemes - 1] = 0; |
| } |