| Index: chrome/browser/search/local_ntp_source.cc
|
| diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
|
| index bcda9f437e71d5f5b2fdb3b2b7e4f7cbd13daf4a..975bf3bbe62fad3cfa2ef3b0e7c4ce99af18faa5 100644
|
| --- a/chrome/browser/search/local_ntp_source.cc
|
| +++ b/chrome/browser/search/local_ntp_source.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/logging.h"
|
| #include "base/memory/ref_counted_memory.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/metrics/field_trial.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/values.h"
|
| @@ -30,17 +31,25 @@
|
|
|
| namespace {
|
|
|
| +// Constants related to the Material Design NTP field trial.
|
| +const char kMaterialDesignNTPFieldTrialName[] = "MaterialDesignNTP";
|
| +const char kMaterialDesignNTPFieldTrialEnabledPrefix[] = "Enabled";
|
| +
|
| +// Class name to be used for the new design in local resources.
|
| +const char kMaterialDesignNTPClassName[] = "md";
|
| +
|
| // Signifies a locally constructed resource, i.e. not from grit/.
|
| const int kLocalResource = -1;
|
|
|
| const char kConfigDataFilename[] = "config.js";
|
| +const char kLocalNTPFilename[] = "local-ntp.html";
|
|
|
| const struct Resource{
|
| const char* filename;
|
| int identifier;
|
| const char* mime_type;
|
| } kResources[] = {
|
| - { "local-ntp.html", IDR_LOCAL_NTP_HTML, "text/html" },
|
| + { kLocalNTPFilename, IDR_LOCAL_NTP_HTML, "text/html" },
|
| { "local-ntp.js", IDR_LOCAL_NTP_JS, "application/javascript" },
|
| { kConfigDataFilename, kLocalResource, "application/javascript" },
|
| { "local-ntp.css", IDR_LOCAL_NTP_CSS, "text/css" },
|
| @@ -75,6 +84,14 @@ bool DefaultSearchProviderIsGoogle(Profile* profile) {
|
| SEARCH_ENGINE_GOOGLE);
|
| }
|
|
|
| +// Returns whether the user is part of a group where the Material Design NTP is
|
| +// enabled.
|
| +bool IsMaterialDesignEnabled() {
|
| + return StartsWithASCII(
|
| + base::FieldTrialList::FindFullName(kMaterialDesignNTPFieldTrialName),
|
| + kMaterialDesignNTPFieldTrialEnabledPrefix, true);
|
| +}
|
| +
|
| // Adds a localized string keyed by resource id to the dictionary.
|
| void AddString(base::DictionaryValue* dictionary,
|
| const std::string& key,
|
| @@ -150,6 +167,13 @@ void LocalNtpSource::StartDataRequest(
|
| callback.Run(base::RefCountedString::TakeString(&config_data_js));
|
| return;
|
| }
|
| + if (stripped_path == kLocalNTPFilename) {
|
| + SendResourceWithClass(
|
| + IDR_LOCAL_NTP_HTML,
|
| + IsMaterialDesignEnabled() ? kMaterialDesignNTPClassName : "",
|
| + callback);
|
| + return;
|
| + }
|
| float scale = 1.0f;
|
| std::string filename;
|
| webui::ParsePathAndScale(
|
| @@ -199,3 +223,14 @@ std::string LocalNtpSource::GetContentSecurityPolicyFrameSrc() const {
|
| return base::StringPrintf("frame-src %s;",
|
| chrome::kChromeSearchMostVisitedUrl);
|
| }
|
| +
|
| +void LocalNtpSource::SendResourceWithClass(
|
| + int resource_id,
|
| + const std::string& class_name,
|
| + const content::URLDataSource::GotDataCallback& callback) {
|
| + base::StringPiece resource_data =
|
| + ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id);
|
| + std::string response(resource_data.as_string());
|
| + ReplaceFirstSubstringAfterOffset(&response, 0, "{{CLASS}}", class_name);
|
| + callback.Run(base::RefCountedString::TakeString(&response));
|
| +}
|
|
|