Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: chrome/browser/ui/webui/settings/about_handler.cc

Issue 1971483002: MD Settings: About page, porting C++ handler and adding browser proxy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing comments. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/help/help_handler.h" 5 #include "chrome/browser/ui/webui/settings/about_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 10
11 #include "ash/system/chromeos/devicetype_utils.h" 11 #include "ash/system/chromeos/devicetype_utils.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/bind_helpers.h" 13 #include "base/bind_helpers.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/files/file_path.h" 15 #include "base/files/file_path.h"
(...skipping 20 matching lines...) Expand all
36 #include "chrome/common/url_constants.h" 36 #include "chrome/common/url_constants.h"
37 #include "chrome/grit/chromium_strings.h" 37 #include "chrome/grit/chromium_strings.h"
38 #include "chrome/grit/generated_resources.h" 38 #include "chrome/grit/generated_resources.h"
39 #include "components/google/core/browser/google_util.h" 39 #include "components/google/core/browser/google_util.h"
40 #include "components/policy/core/common/policy_namespace.h" 40 #include "components/policy/core/common/policy_namespace.h"
41 #include "components/version_info/version_info.h" 41 #include "components/version_info/version_info.h"
42 #include "content/public/browser/browser_thread.h" 42 #include "content/public/browser/browser_thread.h"
43 #include "content/public/browser/notification_service.h" 43 #include "content/public/browser/notification_service.h"
44 #include "content/public/browser/web_contents.h" 44 #include "content/public/browser/web_contents.h"
45 #include "content/public/browser/web_ui.h" 45 #include "content/public/browser/web_ui.h"
46 #include "content/public/browser/web_ui_data_source.h"
46 #include "content/public/common/user_agent.h" 47 #include "content/public/common/user_agent.h"
47 #include "grit/components_chromium_strings.h" 48 #include "grit/components_chromium_strings.h"
48 #include "grit/components_google_chrome_strings.h" 49 #include "grit/components_google_chrome_strings.h"
49 #include "grit/components_strings.h" 50 #include "grit/components_strings.h"
50 #include "grit/generated_resources.h" 51 #include "grit/generated_resources.h"
51 #include "policy/policy_constants.h" 52 #include "policy/policy_constants.h"
52 #include "ui/base/l10n/l10n_util.h" 53 #include "ui/base/l10n/l10n_util.h"
53 #include "v8/include/v8.h" 54 #include "v8/include/v8.h"
54 55
55 #if defined(OS_CHROMEOS) 56 #if defined(OS_CHROMEOS)
56 #include "base/files/file_util_proxy.h" 57 #include "base/files/file_util_proxy.h"
57 #include "base/i18n/time_formatting.h" 58 #include "base/i18n/time_formatting.h"
58 #include "base/sys_info.h" 59 #include "base/sys_info.h"
59 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" 60 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
60 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact ory.h" 61 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact ory.h"
61 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 62 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
62 #include "chrome/browser/chromeos/profiles/profile_helper.h" 63 #include "chrome/browser/chromeos/profiles/profile_helper.h"
63 #include "chrome/browser/chromeos/settings/cros_settings.h" 64 #include "chrome/browser/chromeos/settings/cros_settings.h"
64 #include "chrome/browser/profiles/profile.h" 65 #include "chrome/browser/profiles/profile.h"
65 #include "chrome/browser/ui/webui/chromeos/image_source.h" 66 #include "chrome/browser/ui/webui/chromeos/image_source.h"
66 #include "chrome/browser/ui/webui/help/help_utils_chromeos.h" 67 #include "chrome/browser/ui/webui/help/help_utils_chromeos.h"
67 #include "chrome/browser/ui/webui/help/version_updater_chromeos.h" 68 #include "chrome/browser/ui/webui/help/version_updater_chromeos.h"
68 #include "chromeos/chromeos_switches.h" 69 #include "chromeos/chromeos_switches.h"
69 #include "chromeos/dbus/dbus_thread_manager.h"
70 #include "chromeos/dbus/power_manager_client.h" 70 #include "chromeos/dbus/power_manager_client.h"
71 #include "chromeos/system/statistics_provider.h" 71 #include "chromeos/system/statistics_provider.h"
72 #include "components/prefs/pref_service.h"
73 #include "components/user_manager/user_manager.h" 72 #include "components/user_manager/user_manager.h"
74 #endif 73 #endif
75 74
76 using base::ListValue; 75 using base::ListValue;
77 using content::BrowserThread; 76 using content::BrowserThread;
78 77
79 namespace { 78 namespace {
80 79
81 #if defined(OS_CHROMEOS) 80 #if defined(OS_CHROMEOS)
82 81
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 base::FilePath text_path(chrome::kChromeOSAssetPath); 195 base::FilePath text_path(chrome::kChromeOSAssetPath);
197 text_path = text_path.Append(path); 196 text_path = text_path.Append(path);
198 text_path = text_path.AppendASCII(kRegulatoryLabelTextFilename); 197 text_path = text_path.AppendASCII(kRegulatoryLabelTextFilename);
199 198
200 std::string contents; 199 std::string contents;
201 if (base::ReadFileToString(text_path, &contents)) 200 if (base::ReadFileToString(text_path, &contents))
202 return contents; 201 return contents;
203 return std::string(); 202 return std::string();
204 } 203 }
205 204
205 std::unique_ptr<base::DictionaryValue> GetVersionInfo() {
206 std::unique_ptr<base::DictionaryValue> version_info(
207 new base::DictionaryValue);
208
209 version_info->SetString(
210 "osVersion",
211 chromeos::version_loader::GetVersion(
212 chromeos::version_loader::VERSION_FULL));
213 version_info->SetString(
214 "arcVersion", chromeos::version_loader::GetARCVersion());
215 version_info->SetString("osFirmware",
216 chromeos::version_loader::GetFirmware());
217
218 return version_info;
219 }
220
206 #endif // defined(OS_CHROMEOS) 221 #endif // defined(OS_CHROMEOS)
207 222
223 std::string UpdateStatusToString(VersionUpdater::Status status) {
224 std::string status_str;
225 switch (status) {
226 case VersionUpdater::CHECKING:
227 status_str = "checking";
228 break;
229 case VersionUpdater::UPDATING:
230 status_str = "updating";
231 break;
232 case VersionUpdater::NEARLY_UPDATED:
233 status_str = "nearly_updated";
234 break;
235 case VersionUpdater::UPDATED:
236 status_str = "updated";
237 break;
238 case VersionUpdater::FAILED:
239 case VersionUpdater::FAILED_OFFLINE:
240 case VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED:
241 status_str = "failed";
242 break;
243 case VersionUpdater::DISABLED:
244 status_str = "disabled";
245 break;
246 case VersionUpdater::DISABLED_BY_ADMIN:
247 status_str = "disabled_by_admin";
248 break;
249 }
Dan Beam 2016/05/11 00:05:57 indent wrong
dpapad 2016/05/11 00:45:31 Done.
250
251 return status_str;
252 }
253
208 } // namespace 254 } // namespace
209 255
210 HelpHandler::HelpHandler() 256 namespace settings {
257
258 AboutHandler::AboutHandler()
211 : policy_registrar_( 259 : policy_registrar_(
212 g_browser_process->policy_service(), 260 g_browser_process->policy_service(),
213 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())), 261 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())),
214 weak_factory_(this) { 262 weak_factory_(this) {
215 } 263 }
216 264
217 HelpHandler::~HelpHandler() { 265 AboutHandler::~AboutHandler() {}
218 }
219 266
220 void HelpHandler::GetLocalizedValues(base::DictionaryValue* localized_strings) { 267 AboutHandler* AboutHandler::Create(content::WebUIDataSource* html_source,
221 struct L10nResources { 268 Profile* profile) {
222 const char* name; 269 html_source->AddString(
223 int ids; 270 "aboutBrowserVersion",
224 };
225
226 static L10nResources resources[] = {
227 {"aboutTitle", IDS_ABOUT_TITLE},
228 #if defined(OS_CHROMEOS)
229 {"aboutProductTitle", IDS_PRODUCT_OS_NAME},
230 #else
231 {"aboutProductTitle", IDS_PRODUCT_NAME},
232 #endif
233 {"aboutProductDescription", IDS_ABOUT_PRODUCT_DESCRIPTION},
234 {"relaunch", IDS_RELAUNCH_BUTTON},
235 #if defined(OS_CHROMEOS)
236 {"relaunchAndPowerwash", IDS_RELAUNCH_AND_POWERWASH_BUTTON},
237 #endif
238 {"productName", IDS_PRODUCT_NAME},
239 {"updateCheckStarted", IDS_UPGRADE_CHECK_STARTED},
240 {"updating", IDS_UPGRADE_UPDATING},
241 #if defined(OS_CHROMEOS) || defined(OS_WIN)
242 {"updateDisabledByPolicy", IDS_UPGRADE_DISABLED_BY_POLICY},
243 #endif // defined(OS_CHROMEOS) || defined(OS_WIN)
244 #if defined(OS_CHROMEOS)
245 {"updateButton", IDS_UPGRADE_BUTTON},
246 {"updatingChannelSwitch", IDS_UPGRADE_UPDATING_CHANNEL_SWITCH},
247 #endif
248 {"updateAlmostDone", IDS_UPGRADE_SUCCESSFUL_RELAUNCH},
249 #if defined(OS_CHROMEOS)
250 {"successfulChannelSwitch", IDS_UPGRADE_SUCCESSFUL_CHANNEL_SWITCH},
251 #endif
252 {"getHelpWithChrome", IDS_GET_HELP_USING_CHROME},
253 {"reportAnIssue", IDS_REPORT_AN_ISSUE},
254 #if defined(OS_CHROMEOS)
255 {"platform", IDS_PLATFORM_LABEL},
256 {"arcVersion", IDS_ARC_VERSION_LABEL},
257 {"firmware", IDS_ABOUT_PAGE_FIRMWARE},
258 {"showMoreInfo", IDS_SHOW_MORE_INFO},
259 {"hideMoreInfo", IDS_HIDE_MORE_INFO},
260 {"channel", IDS_ABOUT_PAGE_CHANNEL},
261 {"stable", IDS_ABOUT_PAGE_CHANNEL_STABLE},
262 {"beta", IDS_ABOUT_PAGE_CHANNEL_BETA},
263 {"dev", IDS_ABOUT_PAGE_CHANNEL_DEVELOPMENT},
264 {"channel-changed", IDS_ABOUT_PAGE_CHANNEL_CHANGED},
265 {"currentChannelStable", IDS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE},
266 {"currentChannelBeta", IDS_ABOUT_PAGE_CURRENT_CHANNEL_BETA},
267 {"currentChannelDev", IDS_ABOUT_PAGE_CURRENT_CHANNEL_DEV},
268 {"currentChannel", IDS_ABOUT_PAGE_CURRENT_CHANNEL},
269 {"channelChangeButton", IDS_ABOUT_PAGE_CHANNEL_CHANGE_BUTTON},
270 {"channelChangeDisallowedMessage",
271 IDS_ABOUT_PAGE_CHANNEL_CHANGE_DISALLOWED_MESSAGE},
272 {"channelChangePageTitle", IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_TITLE},
273 {"channelChangePagePowerwashTitle",
274 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_TITLE},
275 {"channelChangePagePowerwashMessage",
276 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_MESSAGE},
277 {"channelChangePageDelayedChangeTitle",
278 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_DELAYED_CHANGE_TITLE},
279 {"channelChangePageUnstableTitle",
280 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_UNSTABLE_TITLE},
281 {"channelChangePagePowerwashButton",
282 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_BUTTON},
283 {"channelChangePageChangeButton",
284 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_CHANGE_BUTTON},
285 {"channelChangePageCancelButton",
286 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_CANCEL_BUTTON},
287 {"webkit", IDS_WEBKIT},
288 {"userAgent", IDS_VERSION_UI_USER_AGENT},
289 {"commandLine", IDS_VERSION_UI_COMMAND_LINE},
290 {"buildDate", IDS_VERSION_UI_BUILD_DATE},
291 #endif
292 #if defined(OS_MACOSX) || defined(OS_WIN)
293 {"learnMore", IDS_LEARN_MORE},
294 #endif
295 #if defined(OS_MACOSX)
296 {"promote", IDS_ABOUT_CHROME_PROMOTE_UPDATER},
297 #endif
298 };
299
300 for (size_t i = 0; i < arraysize(resources); ++i) {
301 localized_strings->SetString(resources[i].name,
302 l10n_util::GetStringUTF16(resources[i].ids));
303 }
304
305 #if defined(OS_CHROMEOS)
306 localized_strings->SetString("upToDate", ash::SubstituteChromeOSDeviceType(
307 IDS_UPGRADE_UP_TO_DATE));
308 #else
309 localized_strings->SetString("upToDate", l10n_util::GetStringUTF16(
310 IDS_UPGRADE_UP_TO_DATE));
311 #endif
312
313 localized_strings->SetString("updateObsoleteSystem",
314 ObsoleteSystem::LocalizedObsoleteString());
315 localized_strings->SetString("updateObsoleteSystemURL",
316 ObsoleteSystem::GetLinkURL());
317
318 localized_strings->SetString(
319 "browserVersion",
320 l10n_util::GetStringFUTF16(IDS_ABOUT_PRODUCT_VERSION, 271 l10n_util::GetStringFUTF16(IDS_ABOUT_PRODUCT_VERSION,
321 BuildBrowserVersionString())); 272 BuildBrowserVersionString()));
322 273
323 base::Time::Exploded exploded_time; 274 base::Time::Exploded exploded_time;
324 base::Time::Now().LocalExplode(&exploded_time); 275 base::Time::Now().LocalExplode(&exploded_time);
325 localized_strings->SetString( 276 html_source->AddString(
326 "productCopyright", 277 "aboutProductCopyright",
327 l10n_util::GetStringFUTF16(IDS_ABOUT_VERSION_COPYRIGHT, 278 l10n_util::GetStringFUTF16(IDS_ABOUT_VERSION_COPYRIGHT,
328 base::IntToString16(exploded_time.year))); 279 base::IntToString16(exploded_time.year)));
329 280
330 base::string16 license = l10n_util::GetStringFUTF16( 281 base::string16 license = l10n_util::GetStringFUTF16(
331 IDS_VERSION_UI_LICENSE, base::ASCIIToUTF16(chrome::kChromiumProjectURL), 282 IDS_VERSION_UI_LICENSE, base::ASCIIToUTF16(chrome::kChromiumProjectURL),
332 base::ASCIIToUTF16(chrome::kChromeUICreditsURL)); 283 base::ASCIIToUTF16(chrome::kChromeUICreditsURL));
333 localized_strings->SetString("productLicense", license); 284 html_source->AddString("aboutProductLicense", license);
285
286 html_source->AddBoolean("aboutObsolteNowOrSoon",
287 ObsoleteSystem::IsObsoleteNowOrSoon());
288 html_source->AddBoolean(
289 "aboutObsolteEndOfTheLine",
290 ObsoleteSystem::IsObsoleteNowOrSoon() &&
291 ObsoleteSystem::IsEndOfTheLine());
334 292
335 #if defined(OS_CHROMEOS) 293 #if defined(OS_CHROMEOS)
336 base::string16 os_license = l10n_util::GetStringFUTF16( 294 base::string16 os_license = l10n_util::GetStringFUTF16(
337 IDS_ABOUT_CROS_VERSION_LICENSE, 295 IDS_ABOUT_CROS_VERSION_LICENSE,
338 base::ASCIIToUTF16(chrome::kChromeUIOSCreditsURL)); 296 base::ASCIIToUTF16(chrome::kChromeUIOSCreditsURL));
339 localized_strings->SetString("productOsLicense", os_license); 297 html_source->AddString("aboutProductOsLicense", os_license);
340 298
341 base::string16 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME); 299 html_source->AddBoolean("aboutCanChangeChannel", CanChangeChannel(profile));
342 localized_strings->SetString( 300 html_source->AddBoolean("aboutEnterpriseManaged", IsEnterpriseManaged());
343 "channelChangePageDelayedChangeMessage",
344 l10n_util::GetStringFUTF16(
345 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_DELAYED_CHANGE_MESSAGE,
346 product_name));
347 localized_strings->SetString(
348 "channelChangePageUnstableMessage",
349 l10n_util::GetStringFUTF16(
350 IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_UNSTABLE_MESSAGE,
351 product_name));
352 301
353 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 302 base::Time build_time = base::SysInfo::GetLsbReleaseTime();
354 chromeos::switches::kDisableNewChannelSwitcherUI)) { 303 base::string16 build_date = base::TimeFormatFriendlyDate(build_time);
355 localized_strings->SetBoolean("disableNewChannelSwitcherUI", true); 304 html_source->AddString("aboutBuildDate", build_date);
356 }
357 #endif 305 #endif
358 306
359 base::string16 tos = l10n_util::GetStringFUTF16( 307 return new AboutHandler();
360 IDS_ABOUT_TERMS_OF_SERVICE, base::UTF8ToUTF16(chrome::kChromeUITermsURL));
361 localized_strings->SetString("productTOS", tos);
362
363 localized_strings->SetString("webkitVersion", content::GetWebKitVersion());
364
365 localized_strings->SetString("jsEngine", "V8");
366 localized_strings->SetString("jsEngineVersion", v8::V8::GetVersion());
367
368 localized_strings->SetString("userAgentInfo", GetUserAgent());
369
370 base::CommandLine::StringType command_line =
371 base::CommandLine::ForCurrentProcess()->GetCommandLineString();
372 localized_strings->SetString("commandLineInfo", command_line);
373 } 308 }
374 309
375 void HelpHandler::RegisterMessages() { 310 void AboutHandler::RegisterMessages() {
376 version_updater_.reset(VersionUpdater::Create(web_ui()->GetWebContents())); 311 // TODO(dpapad): Implement an "Unobserve" method and move this to
377 registrar_.Add(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED, 312 // |OnJavascriptAllowed| instead.
Dan Beam 2016/05/11 00:05:57 when are you doing this?
dpapad 2016/05/11 00:45:31 Done, followed the unique_ptr approach.
378 content::NotificationService::AllSources());
379 policy_registrar_.Observe( 313 policy_registrar_.Observe(
380 policy::key::kDeviceAutoUpdateDisabled, 314 policy::key::kDeviceAutoUpdateDisabled,
381 base::Bind(&HelpHandler::OnDeviceAutoUpdatePolicyChanged, 315 base::Bind(&AboutHandler::OnDeviceAutoUpdatePolicyChanged,
382 base::Unretained(this))); 316 base::Unretained(this)));
383 317
384 web_ui()->RegisterMessageCallback("onPageLoaded", 318 web_ui()->RegisterMessageCallback("refreshUpdateStatus",
385 base::Bind(&HelpHandler::OnPageLoaded, base::Unretained(this))); 319 base::Bind(&AboutHandler::HandleRefreshUpdateStatus,
320 base::Unretained(this)));
386 web_ui()->RegisterMessageCallback("relaunchNow", 321 web_ui()->RegisterMessageCallback("relaunchNow",
387 base::Bind(&HelpHandler::RelaunchNow, base::Unretained(this))); 322 base::Bind(&AboutHandler::HandleRelaunchNow, base::Unretained(this)));
388 web_ui()->RegisterMessageCallback("openFeedbackDialog", 323 web_ui()->RegisterMessageCallback("openFeedbackDialog",
389 base::Bind(&HelpHandler::OpenFeedbackDialog, base::Unretained(this))); 324 base::Bind(&AboutHandler::HandleOpenFeedbackDialog,
325 base::Unretained(this)));
390 web_ui()->RegisterMessageCallback("openHelpPage", 326 web_ui()->RegisterMessageCallback("openHelpPage",
391 base::Bind(&HelpHandler::OpenHelpPage, base::Unretained(this))); 327 base::Bind(&AboutHandler::HandleOpenHelpPage, base::Unretained(this)));
392 #if defined(OS_CHROMEOS) 328 #if defined(OS_CHROMEOS)
393 web_ui()->RegisterMessageCallback("setChannel", 329 web_ui()->RegisterMessageCallback("setChannel",
394 base::Bind(&HelpHandler::SetChannel, base::Unretained(this))); 330 base::Bind(&AboutHandler::HandleSetChannel, base::Unretained(this)));
395 web_ui()->RegisterMessageCallback("relaunchAndPowerwash",
396 base::Bind(&HelpHandler::RelaunchAndPowerwash, base::Unretained(this)));
397 web_ui()->RegisterMessageCallback("requestUpdate", 331 web_ui()->RegisterMessageCallback("requestUpdate",
398 base::Bind(&HelpHandler::RequestUpdate, base::Unretained(this))); 332 base::Bind(&AboutHandler::HandleRequestUpdate, base::Unretained(this)));
333
334 web_ui()->RegisterMessageCallback("getVersionInfo",
335 base::Bind(&AboutHandler::HandleGetVersionInfo, base::Unretained(this)));
336 web_ui()->RegisterMessageCallback("getRegulatoryInfo",
337 base::Bind(&AboutHandler::HandleGetRegulatoryInfo,
338 base::Unretained(this)));
339 web_ui()->RegisterMessageCallback("getCurrentChannel",
340 base::Bind(&AboutHandler::HandleGetCurrentChannel,
341 base::Unretained(this)));
342 web_ui()->RegisterMessageCallback("getTargetChannel",
343 base::Bind(&AboutHandler::HandleGetTargetChannel,
344 base::Unretained(this)));
399 #endif 345 #endif
400 #if defined(OS_MACOSX) 346 #if defined(OS_MACOSX)
401 web_ui()->RegisterMessageCallback("promoteUpdater", 347 web_ui()->RegisterMessageCallback("promoteUpdater",
402 base::Bind(&HelpHandler::PromoteUpdater, base::Unretained(this))); 348 base::Bind(&AboutHandler::PromoteUpdater, base::Unretained(this)));
403 #endif 349 #endif
404 350
405 #if defined(OS_CHROMEOS) 351 #if defined(OS_CHROMEOS)
406 // Handler for the product label image, which will be shown if available. 352 // Handler for the product label image, which will be shown if available.
407 content::URLDataSource::Add(Profile::FromWebUI(web_ui()), 353 content::URLDataSource::Add(Profile::FromWebUI(web_ui()),
408 new chromeos::ImageSource()); 354 new chromeos::ImageSource());
409 #endif 355 #endif
410 } 356 }
411 357
412 void HelpHandler::Observe(int type, const content::NotificationSource& source, 358 void AboutHandler::OnJavascriptAllowed() {
359 version_updater_.reset(VersionUpdater::Create(web_ui()->GetWebContents()));
360 registrar_.Add(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED,
361 content::NotificationService::AllSources());
362
Dan Beam 2016/05/11 00:05:57 extra newline
dpapad 2016/05/11 00:45:31 Done. I just ran clang-format for this entire file
363 }
364
365 void AboutHandler::OnJavascriptDisallowed() {
366 registrar_.Remove(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED,
367 content::NotificationService::AllSources());
368 }
369
370 void AboutHandler::Observe(int type, const content::NotificationSource& source,
413 const content::NotificationDetails& details) { 371 const content::NotificationDetails& details) {
414 switch (type) { 372 switch (type) {
415 case chrome::NOTIFICATION_UPGRADE_RECOMMENDED: { 373 case chrome::NOTIFICATION_UPGRADE_RECOMMENDED: {
416 // A version update is installed and ready to go. Refresh the UI so the 374 // A version update is installed and ready to go. Refresh the UI so the
417 // correct state will be shown. 375 // correct state will be shown.
418 RequestUpdate(NULL); 376 RequestUpdate();
419 break; 377 break;
420 } 378 }
421 default: 379 default:
422 NOTREACHED(); 380 NOTREACHED();
423 } 381 }
424 } 382 }
425 383
426 // static 384 // static
427 base::string16 HelpHandler::BuildBrowserVersionString() { 385 base::string16 AboutHandler::BuildBrowserVersionString() {
428 std::string version = version_info::GetVersionNumber(); 386 std::string version = version_info::GetVersionNumber();
429 387
430 std::string modifier = chrome::GetChannelString(); 388 std::string modifier = chrome::GetChannelString();
431 if (!modifier.empty()) 389 if (!modifier.empty())
432 version += " " + modifier; 390 version += " " + modifier;
433 391
434 #if defined(ARCH_CPU_64_BITS) 392 #if defined(ARCH_CPU_64_BITS)
435 version += " (64-bit)"; 393 version += " (64-bit)";
436 #endif 394 #endif
437 395
438 return base::UTF8ToUTF16(version); 396 return base::UTF8ToUTF16(version);
439 } 397 }
440 398
441 void HelpHandler::OnDeviceAutoUpdatePolicyChanged( 399 void AboutHandler::OnDeviceAutoUpdatePolicyChanged(
442 const base::Value* previous_policy, 400 const base::Value* previous_policy,
443 const base::Value* current_policy) { 401 const base::Value* current_policy) {
444 bool previous_auto_update_disabled = false; 402 bool previous_auto_update_disabled = false;
445 if (previous_policy) 403 if (previous_policy)
446 CHECK(previous_policy->GetAsBoolean(&previous_auto_update_disabled)); 404 CHECK(previous_policy->GetAsBoolean(&previous_auto_update_disabled));
447 405
448 bool current_auto_update_disabled = false; 406 bool current_auto_update_disabled = false;
449 if (current_policy) 407 if (current_policy)
450 CHECK(current_policy->GetAsBoolean(&current_auto_update_disabled)); 408 CHECK(current_policy->GetAsBoolean(&current_auto_update_disabled));
451 409
452 if (current_auto_update_disabled != previous_auto_update_disabled) { 410 if (current_auto_update_disabled != previous_auto_update_disabled) {
453 // Refresh the update status to refresh the status of the UI. 411 // Refresh the update status to refresh the status of the UI.
454 RefreshUpdateStatus(); 412 RefreshUpdateStatus();
455 } 413 }
456 } 414 }
457 415
458 void HelpHandler::RefreshUpdateStatus() { 416 void AboutHandler::HandleRefreshUpdateStatus(const base::ListValue* args) {
417 AllowJavascript();
418 RefreshUpdateStatus();
419 }
420
421 void AboutHandler::RefreshUpdateStatus() {
459 // On Chrome OS, do not check for an update automatically. 422 // On Chrome OS, do not check for an update automatically.
460 #if defined(OS_CHROMEOS) 423 #if defined(OS_CHROMEOS)
461 static_cast<VersionUpdaterCros*>(version_updater_.get())->GetUpdateStatus( 424 static_cast<VersionUpdaterCros*>(version_updater_.get())->GetUpdateStatus(
462 base::Bind(&HelpHandler::SetUpdateStatus, base::Unretained(this))); 425 base::Bind(&AboutHandler::SetUpdateStatus, base::Unretained(this)));
463 #else 426 #else
464 RequestUpdate(NULL); 427 RequestUpdate();
465 #endif
466 }
467
468 void HelpHandler::OnPageLoaded(const base::ListValue* args) {
469 #if defined(OS_CHROMEOS)
470 base::PostTaskAndReplyWithResult(
471 content::BrowserThread::GetBlockingPool(),
472 FROM_HERE,
473 base::Bind(&chromeos::version_loader::GetVersion,
474 chromeos::version_loader::VERSION_FULL),
475 base::Bind(&HelpHandler::OnOSVersion,
476 weak_factory_.GetWeakPtr()));
477 base::PostTaskAndReplyWithResult(
478 content::BrowserThread::GetBlockingPool(),
479 FROM_HERE,
480 base::Bind(&chromeos::version_loader::GetARCVersion),
481 base::Bind(&HelpHandler::OnARCVersion,
482 weak_factory_.GetWeakPtr()));
483 base::PostTaskAndReplyWithResult(
484 content::BrowserThread::GetBlockingPool(),
485 FROM_HERE,
486 base::Bind(&chromeos::version_loader::GetFirmware),
487 base::Bind(&HelpHandler::OnOSFirmware,
488 weak_factory_.GetWeakPtr()));
489
490 web_ui()->CallJavascriptFunction(
491 "help.HelpPage.updateEnableReleaseChannel",
492 base::FundamentalValue(CanChangeChannel(Profile::FromWebUI(web_ui()))));
493
494 base::Time build_time = base::SysInfo::GetLsbReleaseTime();
495 base::string16 build_date = base::TimeFormatFriendlyDate(build_time);
496 web_ui()->CallJavascriptFunction("help.HelpPage.setBuildDate",
497 base::StringValue(build_date));
498 #endif // defined(OS_CHROMEOS)
499
500 RefreshUpdateStatus();
501
502 web_ui()->CallJavascriptFunction(
503 "help.HelpPage.setObsoleteSystem",
504 base::FundamentalValue(ObsoleteSystem::IsObsoleteNowOrSoon()));
505 web_ui()->CallJavascriptFunction(
506 "help.HelpPage.setObsoleteSystemEndOfTheLine",
507 base::FundamentalValue(ObsoleteSystem::IsObsoleteNowOrSoon() &&
508 ObsoleteSystem::IsEndOfTheLine()));
509
510 #if defined(OS_CHROMEOS)
511 web_ui()->CallJavascriptFunction(
512 "help.HelpPage.updateIsEnterpriseManaged",
513 base::FundamentalValue(IsEnterpriseManaged()));
514 // First argument to GetChannel() is a flag that indicates whether
515 // current channel should be returned (if true) or target channel
516 // (otherwise).
517 version_updater_->GetChannel(true,
518 base::Bind(&HelpHandler::OnCurrentChannel, weak_factory_.GetWeakPtr()));
519 version_updater_->GetChannel(false,
520 base::Bind(&HelpHandler::OnTargetChannel, weak_factory_.GetWeakPtr()));
521
522 base::PostTaskAndReplyWithResult(
523 content::BrowserThread::GetBlockingPool(),
524 FROM_HERE,
525 base::Bind(&FindRegulatoryLabelDir),
526 base::Bind(&HelpHandler::OnRegulatoryLabelDirFound,
527 weak_factory_.GetWeakPtr()));
528 #endif 428 #endif
529 } 429 }
530 430
531 #if defined(OS_MACOSX) 431 #if defined(OS_MACOSX)
532 void HelpHandler::PromoteUpdater(const base::ListValue* args) { 432 void AboutHandler::PromoteUpdater(const base::ListValue* args) {
533 version_updater_->PromoteUpdater(); 433 version_updater_->PromoteUpdater();
534 } 434 }
535 #endif 435 #endif
536 436
537 void HelpHandler::RelaunchNow(const base::ListValue* args) { 437 void AboutHandler::HandleRelaunchNow(const base::ListValue* args) {
538 DCHECK(args->empty()); 438 DCHECK(args->empty());
539 version_updater_->RelaunchBrowser(); 439 version_updater_->RelaunchBrowser();
540 } 440 }
541 441
542 void HelpHandler::OpenFeedbackDialog(const base::ListValue* args) { 442 void AboutHandler::HandleOpenFeedbackDialog(const base::ListValue* args) {
543 DCHECK(args->empty()); 443 DCHECK(args->empty());
544 Browser* browser = chrome::FindBrowserWithWebContents( 444 Browser* browser = chrome::FindBrowserWithWebContents(
545 web_ui()->GetWebContents()); 445 web_ui()->GetWebContents());
546 chrome::OpenFeedbackDialog(browser); 446 chrome::OpenFeedbackDialog(browser);
547 } 447 }
548 448
549 void HelpHandler::OpenHelpPage(const base::ListValue* args) { 449 void AboutHandler::HandleOpenHelpPage(const base::ListValue* args) {
550 DCHECK(args->empty()); 450 DCHECK(args->empty());
551 Browser* browser = chrome::FindBrowserWithWebContents( 451 Browser* browser = chrome::FindBrowserWithWebContents(
552 web_ui()->GetWebContents()); 452 web_ui()->GetWebContents());
553 chrome::ShowHelp(browser, chrome::HELP_SOURCE_WEBUI); 453 chrome::ShowHelp(browser, chrome::HELP_SOURCE_WEBUI);
554 } 454 }
555 455
556 #if defined(OS_CHROMEOS) 456 #if defined(OS_CHROMEOS)
557 457
558 void HelpHandler::SetChannel(const base::ListValue* args) { 458 void AboutHandler::HandleSetChannel(const base::ListValue* args) {
559 DCHECK(args->GetSize() == 2); 459 DCHECK(args->GetSize() == 2);
560 460
561 if (!CanChangeChannel(Profile::FromWebUI(web_ui()))) { 461 if (!CanChangeChannel(Profile::FromWebUI(web_ui()))) {
562 LOG(WARNING) << "Non-owner tried to change release track."; 462 LOG(WARNING) << "Non-owner tried to change release track.";
563 return; 463 return;
564 } 464 }
565 465
566 base::string16 channel; 466 base::string16 channel;
567 bool is_powerwash_allowed; 467 bool is_powerwash_allowed;
568 if (!args->GetString(0, &channel) || 468 if (!args->GetString(0, &channel) ||
569 !args->GetBoolean(1, &is_powerwash_allowed)) { 469 !args->GetBoolean(1, &is_powerwash_allowed)) {
570 LOG(ERROR) << "Can't parse SetChannel() args"; 470 LOG(ERROR) << "Can't parse SetChannel() args";
571 return; 471 return;
572 } 472 }
573 473
574 version_updater_->SetChannel(base::UTF16ToUTF8(channel), 474 version_updater_->SetChannel(base::UTF16ToUTF8(channel),
575 is_powerwash_allowed); 475 is_powerwash_allowed);
576 if (user_manager::UserManager::Get()->IsCurrentUserOwner()) { 476 if (user_manager::UserManager::Get()->IsCurrentUserOwner()) {
577 // Check for update after switching release channel. 477 // Check for update after switching release channel.
578 version_updater_->CheckForUpdate(base::Bind(&HelpHandler::SetUpdateStatus, 478 version_updater_->CheckForUpdate(base::Bind(&AboutHandler::SetUpdateStatus,
579 base::Unretained(this)), 479 base::Unretained(this)),
580 VersionUpdater::PromoteCallback()); 480 VersionUpdater::PromoteCallback());
581 } 481 }
582 } 482 }
583 483
584 void HelpHandler::RelaunchAndPowerwash(const base::ListValue* args) { 484 void AboutHandler::HandleGetVersionInfo(const base::ListValue* args) {
585 DCHECK(args->empty()); 485 CHECK_EQ(1U, args->GetSize());
486 std::string callback_id;
487 CHECK(args->GetString(0, &callback_id));
586 488
587 if (IsEnterpriseManaged()) 489 base::PostTaskAndReplyWithResult(
588 return; 490 content::BrowserThread::GetBlockingPool(),
491 FROM_HERE,
492 base::Bind(&GetVersionInfo),
493 base::Bind(&AboutHandler::OnGetVersionInfoReady,
494 weak_factory_.GetWeakPtr(),
495 callback_id));
496 }
589 497
590 PrefService* prefs = g_browser_process->local_state(); 498 void AboutHandler::OnGetVersionInfoReady(
591 prefs->SetBoolean(prefs::kFactoryResetRequested, true); 499 std::string callback_id,
592 prefs->CommitPendingWrite(); 500 std::unique_ptr<base::DictionaryValue> version_info) {
501 ResolveJavascriptCallback(base::StringValue(callback_id), *version_info);
502 }
593 503
594 // Perform sign out. Current chrome process will then terminate, new one will 504 void AboutHandler::HandleGetRegulatoryInfo(const base::ListValue* args) {
595 // be launched (as if it was a restart). 505 CHECK_EQ(1U, args->GetSize());
596 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 506 std::string callback_id;
507 CHECK(args->GetString(0, &callback_id));
508
509 base::PostTaskAndReplyWithResult(
510 content::BrowserThread::GetBlockingPool(),
511 FROM_HERE,
512 base::Bind(&FindRegulatoryLabelDir),
513 base::Bind(&AboutHandler::OnRegulatoryLabelDirFound,
514 weak_factory_.GetWeakPtr(),
515 callback_id));
516 }
517
518 void AboutHandler::HandleGetCurrentChannel(const base::ListValue* args) {
519 CHECK_EQ(1U, args->GetSize());
520 std::string callback_id;
521 CHECK(args->GetString(0, &callback_id));
522 // First argument to GetChannel() is a flag that indicates whether
523 // current channel should be returned (if true) or target channel
524 // (otherwise).
525 version_updater_->GetChannel(true,
526 base::Bind(&AboutHandler::OnGetChannelReady,
527 weak_factory_.GetWeakPtr(),
528 callback_id));
529 }
530
531 void AboutHandler::HandleGetTargetChannel(const base::ListValue* args) {
532 CHECK_EQ(1U, args->GetSize());
533 std::string callback_id;
534 CHECK(args->GetString(0, &callback_id));
535 version_updater_->GetChannel(false,
536 base::Bind(&AboutHandler::OnGetChannelReady,
537 weak_factory_.GetWeakPtr(),
538 callback_id));
539 }
540
541 void AboutHandler::OnGetChannelReady(std::string callback_id,
542 const std::string& channel) {
543 ResolveJavascriptCallback(
544 base::StringValue(callback_id), base::StringValue(channel));
545 }
546
547 void AboutHandler::HandleRequestUpdate(const base::ListValue* args) {
548 RequestUpdate();
597 } 549 }
598 550
599 #endif // defined(OS_CHROMEOS) 551 #endif // defined(OS_CHROMEOS)
600 552
601 void HelpHandler::RequestUpdate(const base::ListValue* args) { 553 void AboutHandler::RequestUpdate() {
602 VersionUpdater::PromoteCallback promote_callback;
603 version_updater_->CheckForUpdate( 554 version_updater_->CheckForUpdate(
604 base::Bind(&HelpHandler::SetUpdateStatus, base::Unretained(this)), 555 base::Bind(&AboutHandler::SetUpdateStatus, base::Unretained(this)),
605 #if defined(OS_MACOSX) 556 #if defined(OS_MACOSX)
606 base::Bind(&HelpHandler::SetPromotionState, base::Unretained(this))); 557 base::Bind(&AboutHandler::SetPromotionState, base::Unretained(this)));
607 #else 558 #else
608 VersionUpdater::PromoteCallback()); 559 VersionUpdater::PromoteCallback());
609 #endif // OS_MACOSX 560 #endif // OS_MACOSX
610 } 561 }
611 562
612 void HelpHandler::SetUpdateStatus(VersionUpdater::Status status, 563 void AboutHandler::SetUpdateStatus(VersionUpdater::Status status,
613 int progress, const base::string16& message) { 564 int progress, const base::string16& message) {
614 // Only UPDATING state should have progress set. 565 // Only UPDATING state should have progress set.
615 DCHECK(status == VersionUpdater::UPDATING || progress == 0); 566 DCHECK(status == VersionUpdater::UPDATING || progress == 0);
616 567
617 std::string status_str; 568 std::unique_ptr<base::DictionaryValue> event(new base::DictionaryValue);
618 switch (status) { 569 event->SetString("status", UpdateStatusToString(status));
619 case VersionUpdater::CHECKING: 570 event->SetString("message", message);
620 status_str = "checking"; 571 event->SetInteger("progress", progress);
621 break;
622 case VersionUpdater::UPDATING:
623 status_str = "updating";
624 break;
625 case VersionUpdater::NEARLY_UPDATED:
626 status_str = "nearly_updated";
627 break;
628 case VersionUpdater::UPDATED:
629 status_str = "updated";
630 break;
631 case VersionUpdater::FAILED:
632 case VersionUpdater::FAILED_OFFLINE:
633 case VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED:
634 status_str = "failed";
635 break;
636 case VersionUpdater::DISABLED:
637 status_str = "disabled";
638 break;
639 case VersionUpdater::DISABLED_BY_ADMIN:
640 status_str = "disabled_by_admin";
641 break;
642 }
643
644 web_ui()->CallJavascriptFunction("help.HelpPage.setUpdateStatus",
645 base::StringValue(status_str),
646 base::StringValue(message));
647
648 if (status == VersionUpdater::UPDATING) {
649 web_ui()->CallJavascriptFunction("help.HelpPage.setProgress",
650 base::FundamentalValue(progress));
651 }
652 572
653 #if defined(OS_CHROMEOS) 573 #if defined(OS_CHROMEOS)
654 if (status == VersionUpdater::FAILED_OFFLINE || 574 if (status == VersionUpdater::FAILED_OFFLINE ||
655 status == VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED) { 575 status == VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED) {
656 base::string16 types_msg = GetAllowedConnectionTypesMessage(); 576 base::string16 types_msg = GetAllowedConnectionTypesMessage();
657 if (!types_msg.empty()) { 577 if (!types_msg.empty())
658 web_ui()->CallJavascriptFunction( 578 event->SetString("connectionTypes", types_msg);
659 "help.HelpPage.setAndShowAllowedConnectionTypesMsg", 579 else
660 base::StringValue(types_msg)); 580 event->Set("connectionTypes", base::Value::CreateNullValue());
661 } else {
662 web_ui()->CallJavascriptFunction(
663 "help.HelpPage.showAllowedConnectionTypesMsg",
664 base::FundamentalValue(false));
665 }
666 } else { 581 } else {
667 web_ui()->CallJavascriptFunction( 582 event->Set("connectionTypes", base::Value::CreateNullValue());
668 "help.HelpPage.showAllowedConnectionTypesMsg",
669 base::FundamentalValue(false));
670 } 583 }
671 #endif // defined(OS_CHROMEOS) 584 #endif // defined(OS_CHROMEOS)
585
586 CallJavascriptFunction("cr.webUIListenerCallback",
587 base::StringValue("update-status-changed"),
588 *event);
672 } 589 }
673 590
674 #if defined(OS_MACOSX) 591 #if defined(OS_MACOSX)
675 void HelpHandler::SetPromotionState(VersionUpdater::PromotionState state) { 592 void AboutHandler::SetPromotionState(VersionUpdater::PromotionState state) {
676 std::string state_str; 593 std::string state_str;
677 switch (state) { 594 switch (state) {
678 case VersionUpdater::PROMOTE_HIDDEN: 595 case VersionUpdater::PROMOTE_HIDDEN:
679 state_str = "hidden"; 596 state_str = "hidden";
680 break; 597 break;
681 case VersionUpdater::PROMOTE_ENABLED: 598 case VersionUpdater::PROMOTE_ENABLED:
682 state_str = "enabled"; 599 state_str = "enabled";
683 break; 600 break;
684 case VersionUpdater::PROMOTE_DISABLED: 601 case VersionUpdater::PROMOTE_DISABLED:
685 state_str = "disabled"; 602 state_str = "disabled";
686 break; 603 break;
687 } 604 }
688 605
689 web_ui()->CallJavascriptFunction("help.HelpPage.setPromotionState", 606 CallJavascriptFunction("cr.webUIListenerCallback",
690 base::StringValue(state_str)); 607 base::StringValue("promotion-state-changed"),
608 base::StringValue(state_str));
691 } 609 }
692 #endif // defined(OS_MACOSX) 610 #endif // defined(OS_MACOSX)
693 611
694 #if defined(OS_CHROMEOS) 612 #if defined(OS_CHROMEOS)
695 void HelpHandler::OnOSVersion(const std::string& version) { 613 void AboutHandler::OnRegulatoryLabelDirFound(std::string callback_id,
696 web_ui()->CallJavascriptFunction("help.HelpPage.setOSVersion", 614 const base::FilePath& path) {
697 base::StringValue(version)); 615 if (path.empty()) {
698 } 616 ResolveJavascriptCallback(base::StringValue(callback_id),
699 617 *base::Value::CreateNullValue());
700 void HelpHandler::OnARCVersion(const std::string& firmware) {
701 web_ui()->CallJavascriptFunction("help.HelpPage.setARCVersion",
702 base::StringValue(firmware));
703 }
704
705 void HelpHandler::OnOSFirmware(const std::string& firmware) {
706 web_ui()->CallJavascriptFunction("help.HelpPage.setOSFirmware",
707 base::StringValue(firmware));
708 }
709
710 void HelpHandler::OnCurrentChannel(const std::string& channel) {
711 web_ui()->CallJavascriptFunction(
712 "help.HelpPage.updateCurrentChannel", base::StringValue(channel));
713 }
714
715 void HelpHandler::OnTargetChannel(const std::string& channel) {
716 web_ui()->CallJavascriptFunction(
717 "help.HelpPage.updateTargetChannel", base::StringValue(channel));
718 }
719
720 void HelpHandler::OnRegulatoryLabelDirFound(const base::FilePath& path) {
721 if (path.empty())
722 return; 618 return;
619 }
723 620
724 base::PostTaskAndReplyWithResult( 621 base::PostTaskAndReplyWithResult(
725 content::BrowserThread::GetBlockingPool(), FROM_HERE, 622 content::BrowserThread::GetBlockingPool(), FROM_HERE,
726 base::Bind(&ReadRegulatoryLabelText, path), 623 base::Bind(&ReadRegulatoryLabelText, path),
727 base::Bind(&HelpHandler::OnRegulatoryLabelTextRead, 624 base::Bind(&AboutHandler::OnRegulatoryLabelTextRead,
728 weak_factory_.GetWeakPtr())); 625 weak_factory_.GetWeakPtr(),
729 626 callback_id, path));
730 // Send the image path to the WebUI.
731 OnRegulatoryLabelImageFound(path.AppendASCII(kRegulatoryLabelImageFilename));
732 } 627 }
733 628
734 void HelpHandler::OnRegulatoryLabelImageFound(const base::FilePath& path) { 629 void AboutHandler::OnRegulatoryLabelTextRead(std::string callback_id,
630 const base::FilePath& path,
631 const std::string& text) {
632 std::unique_ptr<base::DictionaryValue> regulatory_info(
633 new base::DictionaryValue);
634 // Remove unnecessary whitespace.
635 regulatory_info->SetString("text", base::CollapseWhitespaceASCII(text, true));
735 std::string url = std::string("chrome://") + chrome::kChromeOSAssetHost + 636 std::string url = std::string("chrome://") + chrome::kChromeOSAssetHost +
736 "/" + path.MaybeAsASCII(); 637 "/" + path.MaybeAsASCII();
737 web_ui()->CallJavascriptFunction("help.HelpPage.setRegulatoryLabelPath", 638 regulatory_info->SetString("url", url);
738 base::StringValue(url));
739 }
740 639
741 void HelpHandler::OnRegulatoryLabelTextRead(const std::string& text) { 640 ResolveJavascriptCallback(
742 // Remove unnecessary whitespace. 641 base::StringValue(callback_id), *regulatory_info);
743 web_ui()->CallJavascriptFunction(
744 "help.HelpPage.setRegulatoryLabelText",
745 base::StringValue(base::CollapseWhitespaceASCII(text, true)));
746 } 642 }
747 643
748 #endif // defined(OS_CHROMEOS) 644 #endif // defined(OS_CHROMEOS)
645
646 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698