Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / search / contextual_search_promo_source_android.cc
index 76606e9..05f67dc 100644 (file)
@@ -4,14 +4,17 @@
 
 #include "chrome/browser/search/contextual_search_promo_source_android.h"
 
+#include <string>
+
+#include "base/json/json_string_value_serializer.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
 #include "chrome/common/url_constants.h"
+#include "chrome/grit/chromium_strings.h"
+#include "components/variations/variations_associated_data.h"
 #include "grit/browser_resources.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/webui/jstemplate_builder.h"
 
 namespace {
 
+const char kPromoConfigPath[] = "/config.js";
 const char kPromoHTMLPath[] = "/promo.html";
 const char kPromoCSSPath[] = "/promo.css";
 const char kPromoJSPath[] = "/promo.js";
 const char kRobotoWoffPath[] = "/roboto.woff";
 const char kRobotoWoff2Path[] = "/roboto.woff2";
 
+// Field trial related constants.
+const char kContextualSearchFieldTrialName[] = "ContextualSearch";
+const char kContextualSearchHidePromoHeaderParam[] = "hide_promo_header";
+const char kContextualSearchEnabledValue[] = "enabled";
+
+// Returns whether we should hide the first-run promo header.
+bool ShouldHidePromoHeader() {
+  return variations::GetVariationParamValue(
+      kContextualSearchFieldTrialName, kContextualSearchHidePromoHeaderParam) ==
+          kContextualSearchEnabledValue;
+}
+
+// Returns a JS dictionary of configuration data for the Contextual Search
+// promo.
+std::string GetConfigData() {
+  base::DictionaryValue config_data;
+  config_data.SetBoolean("hideHeader", ShouldHidePromoHeader());
+
+  // Serialize the dictionary.
+  std::string js_text;
+  JSONStringValueSerializer serializer(&js_text);
+  serializer.Serialize(config_data);
+
+  std::string config_data_js;
+  config_data_js.append("var config = ");
+  config_data_js.append(js_text);
+  config_data_js.append(";");
+  return config_data_js;
+}
+
 }  // namespace
 
 ContextualSearchPromoSourceAndroid::ContextualSearchPromoSourceAndroid() {}
@@ -44,6 +78,8 @@ void ContextualSearchPromoSourceAndroid::StartDataRequest(
     SendResource(IDR_CONTEXTUAL_SEARCH_PROMO_CSS, callback);
   } else if (path == kPromoJSPath) {
     SendResource(IDR_CONTEXTUAL_SEARCH_PROMO_JS, callback);
+  } else if (path == kPromoConfigPath) {
+    SendConfigResource(callback);
   } else if (path == kRobotoWoffPath) {
     SendResource(IDR_ROBOTO_WOFF, callback);
   } else if (path == kRobotoWoff2Path) {
@@ -85,12 +121,28 @@ void ContextualSearchPromoSourceAndroid::SendResource(
   callback.Run(response.get());
 }
 
+void ContextualSearchPromoSourceAndroid::SendConfigResource(
+    const content::URLDataSource::GotDataCallback& callback) {
+  std::string response = GetConfigData();
+  callback.Run(base::RefCountedString::TakeString(&response));
+}
+
 void ContextualSearchPromoSourceAndroid::SendHtmlWithStrings(
     const content::URLDataSource::GotDataCallback& callback) {
   base::DictionaryValue strings_data;
+  // The three following statements are part of the description paragraph.
+  strings_data.SetString(
+      "description-1",
+      l10n_util::GetStringUTF16(IDS_CONTEXTUAL_SEARCH_PROMO_DESCRIPTION_1));
+  strings_data.SetString(
+      "feature-name",
+      l10n_util::GetStringUTF16(IDS_CONTEXTUAL_SEARCH_PROMO_FEATURE_NAME));
+  strings_data.SetString(
+      "description-2",
+      l10n_util::GetStringUTF16(IDS_CONTEXTUAL_SEARCH_PROMO_DESCRIPTION_2));
+
   strings_data.SetString(
-      "description",
-      l10n_util::GetStringUTF16(IDS_CONTEXTUAL_SEARCH_PROMO_DESCRIPTION));
+      "heading", l10n_util::GetStringUTF16(IDS_CONTEXTUAL_SEARCH_HEADER));
   strings_data.SetString(
       "optIn", l10n_util::GetStringUTF16(IDS_CONTEXTUAL_SEARCH_PROMO_OPTIN));
   strings_data.SetString(