| Index: chrome/browser/ui/webui/flags_ui.cc | 
| =================================================================== | 
| --- chrome/browser/ui/webui/flags_ui.cc	(revision 89497) | 
| +++ chrome/browser/ui/webui/flags_ui.cc	(working copy) | 
| @@ -14,7 +14,7 @@ | 
| #include "chrome/browser/prefs/pref_service.h" | 
| #include "chrome/browser/profiles/profile.h" | 
| #include "chrome/browser/ui/browser_list.h" | 
| -#include "chrome/browser/ui/webui/chrome_url_data_manager.h" | 
| +#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" | 
| #include "chrome/common/jstemplate_builder.h" | 
| #include "chrome/common/pref_names.h" | 
| #include "chrome/common/url_constants.h" | 
| @@ -32,7 +32,8 @@ | 
| #include "chrome/browser/chromeos/login/user_manager.h" | 
| #endif | 
|  | 
| -namespace { | 
| +static const char kFlagsJs[] = "flags.js"; | 
| +static const char kStringsJs[] = "strings.js"; | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| // | 
| @@ -40,87 +41,78 @@ | 
| // | 
| /////////////////////////////////////////////////////////////////////////////// | 
|  | 
| -class FlagsUIHTMLSource : public ChromeURLDataManager::DataSource { | 
| +class FlagsUIHTMLSource : public ChromeWebUIDataSource { | 
| public: | 
| -  FlagsUIHTMLSource() | 
| -      : DataSource(chrome::kChromeUIFlagsHost, MessageLoop::current()) {} | 
| +  FlagsUIHTMLSource(); | 
|  | 
| // Called when the network layer has requested a resource underneath | 
| // the path we registered. | 
| virtual void StartDataRequest(const std::string& path, | 
| bool is_incognito, | 
| int request_id); | 
| -  virtual std::string GetMimeType(const std::string&) const { | 
| -    return "text/html"; | 
| -  } | 
| +  virtual std::string GetMimeType(const std::string&) const; | 
|  | 
| private: | 
| ~FlagsUIHTMLSource() {} | 
| - | 
| DISALLOW_COPY_AND_ASSIGN(FlagsUIHTMLSource); | 
| }; | 
|  | 
| -void FlagsUIHTMLSource::StartDataRequest(const std::string& path, | 
| -                                        bool is_incognito, | 
| -                                        int request_id) { | 
| -  // Strings used in the JsTemplate file. | 
| -  DictionaryValue localized_strings; | 
| -  localized_strings.SetString("flagsLongTitle", | 
| -      l10n_util::GetStringUTF16(IDS_FLAGS_LONG_TITLE)); | 
| -  localized_strings.SetString("flagsTableTitle", | 
| -      l10n_util::GetStringUTF16(IDS_FLAGS_TABLE_TITLE)); | 
| -  localized_strings.SetString("flagsNoExperimentsAvailable", | 
| -      l10n_util::GetStringUTF16(IDS_FLAGS_NO_EXPERIMENTS_AVAILABLE)); | 
| -  localized_strings.SetString("flagsWarningHeader", l10n_util::GetStringUTF16( | 
| -      IDS_FLAGS_WARNING_HEADER)); | 
| -  localized_strings.SetString("flagsBlurb", l10n_util::GetStringUTF16( | 
| -      IDS_FLAGS_WARNING_TEXT)); | 
| -  localized_strings.SetString("flagsRestartNotice", l10n_util::GetStringFUTF16( | 
| -      IDS_FLAGS_RELAUNCH_NOTICE, | 
| -      l10n_util::GetStringUTF16( | 
| +FlagsUIHTMLSource::FlagsUIHTMLSource() | 
| +    : ChromeWebUIDataSource(chrome::kChromeUIFlagsHost) { | 
| +  AddLocalizedString("flagsLongTitle", IDS_FLAGS_LONG_TITLE); | 
| +  AddLocalizedString("flagsTableTitle", IDS_FLAGS_TABLE_TITLE); | 
| +  AddLocalizedString("flagsNoExperimentsAvailable", | 
| +                     IDS_FLAGS_NO_EXPERIMENTS_AVAILABLE); | 
| +  AddLocalizedString("flagsWarningHeader", IDS_FLAGS_WARNING_HEADER); | 
| +  AddLocalizedString("flagsBlurb", IDS_FLAGS_WARNING_TEXT); | 
| #if defined(OS_CHROMEOS) | 
| -          IDS_PRODUCT_OS_NAME | 
| +  int ids = IDS_PRODUCT_OS_NAME; | 
| #else | 
| -          IDS_PRODUCT_NAME | 
| +  int ids = IDS_PRODUCT_NAME; | 
| #endif | 
| -          ))); | 
| -  localized_strings.SetString("flagsRestartButton", | 
| -      l10n_util::GetStringUTF16(IDS_FLAGS_RELAUNCH_BUTTON)); | 
| -  localized_strings.SetString("disable", | 
| -      l10n_util::GetStringUTF16(IDS_FLAGS_DISABLE)); | 
| -  localized_strings.SetString("enable", | 
| -      l10n_util::GetStringUTF16(IDS_FLAGS_ENABLE)); | 
| +  AddString("flagsRestartNotice", | 
| +            l10n_util::GetStringFUTF16(IDS_FLAGS_RELAUNCH_NOTICE, | 
| +                                       l10n_util::GetStringUTF16(ids))); | 
| +  AddLocalizedString("flagsRestartButton", IDS_FLAGS_RELAUNCH_BUTTON); | 
| +  AddLocalizedString("disable", IDS_FLAGS_DISABLE); | 
| +  AddLocalizedString("enable", IDS_FLAGS_ENABLE); | 
| +#if defined(OS_CHROMEOS) | 
| +  // Set the strings to show which user can actually change the flags | 
| +  AddLocalizedString("ownerOnly", IDS_OPTIONS_ACCOUNTS_OWNER_ONLY); | 
| +  AddString("ownerUserId", | 
| +            UTF8ToUTF16(chromeos::UserCrosSettingsProvider::cached_owner())); | 
| +#endif | 
| +} | 
|  | 
| -  base::StringPiece html = | 
| -      ResourceBundle::GetSharedInstance().GetRawDataResource(IDR_FLAGS_HTML); | 
| +void FlagsUIHTMLSource::StartDataRequest(const std::string& path, | 
| +                                        bool is_incognito, | 
| +                                        int request_id) { | 
| +  if (path == kStringsJs) { | 
| +    SendLocalizedStringsAsJSON(request_id); | 
| +  } else { | 
| +    int idr; | 
| +    if (path == kFlagsJs) | 
| +      idr = IDR_FLAGS_JS; | 
| #if defined (OS_CHROMEOS) | 
| -  if (!chromeos::UserManager::Get()->current_user_is_owner()) { | 
| -    html = ResourceBundle::GetSharedInstance().GetRawDataResource( | 
| -        IDR_FLAGS_HTML_WARNING); | 
| +    else if (!chromeos::UserManager::Get()->current_user_is_owner()) | 
| +      idr = IDR_FLAGS_HTML_WARNING; | 
| +#endif | 
| +    else | 
| +      idr = IDR_FLAGS_HTML; | 
|  | 
| -    // Set the strings to show which user can actually change the flags | 
| -    localized_strings.SetString("ownerOnly", l10n_util::GetStringUTF16( | 
| -        IDS_OPTIONS_ACCOUNTS_OWNER_ONLY)); | 
| -    localized_strings.SetString("ownerUserId", UTF8ToUTF16( | 
| -        chromeos::UserCrosSettingsProvider::cached_owner())); | 
| +    SendFromResourceBundle(request_id, idr); | 
| } | 
| -#endif | 
| -  static const base::StringPiece flags_html(html); | 
| -  ChromeURLDataManager::DataSource::SetFontAndTextDirection(&localized_strings); | 
| +} | 
|  | 
| -  std::string full_html(flags_html.data(), flags_html.size()); | 
| -  jstemplate_builder::AppendJsonHtml(&localized_strings, &full_html); | 
| -  jstemplate_builder::AppendI18nTemplateSourceHtml(&full_html); | 
| -  jstemplate_builder::AppendI18nTemplateProcessHtml(&full_html); | 
| -  jstemplate_builder::AppendJsTemplateSourceHtml(&full_html); | 
| +std::string FlagsUIHTMLSource::GetMimeType(const std::string& path) const { | 
| +  if (path == kStringsJs || path == kFlagsJs) | 
| +    return "application/javascript"; | 
|  | 
| -  scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes); | 
| -  html_bytes->data.resize(full_html.size()); | 
| -  std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin()); | 
| - | 
| -  SendResponse(request_id, html_bytes); | 
| +  return "text/html"; | 
| } | 
|  | 
| +namespace { | 
| + | 
| //////////////////////////////////////////////////////////////////////////////// | 
| // | 
| // FlagsDOMHandler | 
|  |