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

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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
206 #endif // defined(OS_CHROMEOS) 205 #endif // defined(OS_CHROMEOS)
207 206
207 std::string UpdateStatusToString(VersionUpdater::Status status) {
208 std::string status_str;
209 switch (status) {
210 case VersionUpdater::CHECKING:
211 status_str = "checking";
212 break;
213 case VersionUpdater::UPDATING:
214 status_str = "updating";
215 break;
216 case VersionUpdater::NEARLY_UPDATED:
217 status_str = "nearly_updated";
218 break;
219 case VersionUpdater::UPDATED:
220 status_str = "updated";
221 break;
222 case VersionUpdater::FAILED:
223 case VersionUpdater::FAILED_OFFLINE:
224 case VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED:
225 status_str = "failed";
226 break;
227 case VersionUpdater::DISABLED:
228 status_str = "disabled";
229 break;
230 case VersionUpdater::DISABLED_BY_ADMIN:
231 status_str = "disabled_by_admin";
232 break;
233 }
234
235 return status_str;
236 }
237
208 } // namespace 238 } // namespace
209 239
210 HelpHandler::HelpHandler() 240 namespace settings {
241
242 AboutHandler::AboutHandler()
211 : policy_registrar_( 243 : policy_registrar_(
212 g_browser_process->policy_service(), 244 g_browser_process->policy_service(),
213 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())), 245 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())),
214 weak_factory_(this) { 246 weak_factory_(this) {
215 } 247 }
216 248
217 HelpHandler::~HelpHandler() { 249 AboutHandler::~AboutHandler() {}
218 }
219 250
220 void HelpHandler::GetLocalizedValues(base::DictionaryValue* localized_strings) { 251 AboutHandler* AboutHandler::Create(content::WebUIDataSource* html_source,
221 struct L10nResources { 252 Profile* profile) {
222 const char* name; 253 html_source->AddString(
223 int ids; 254 "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, 255 l10n_util::GetStringFUTF16(IDS_ABOUT_PRODUCT_VERSION,
321 BuildBrowserVersionString())); 256 BuildBrowserVersionString()));
322 257
323 base::Time::Exploded exploded_time; 258 base::Time::Exploded exploded_time;
324 base::Time::Now().LocalExplode(&exploded_time); 259 base::Time::Now().LocalExplode(&exploded_time);
325 localized_strings->SetString( 260 html_source->AddString(
326 "productCopyright", 261 "aboutProductCopyright",
327 l10n_util::GetStringFUTF16(IDS_ABOUT_VERSION_COPYRIGHT, 262 l10n_util::GetStringFUTF16(IDS_ABOUT_VERSION_COPYRIGHT,
328 base::IntToString16(exploded_time.year))); 263 base::IntToString16(exploded_time.year)));
329 264
330 base::string16 license = l10n_util::GetStringFUTF16( 265 base::string16 license = l10n_util::GetStringFUTF16(
331 IDS_VERSION_UI_LICENSE, base::ASCIIToUTF16(chrome::kChromiumProjectURL), 266 IDS_VERSION_UI_LICENSE, base::ASCIIToUTF16(chrome::kChromiumProjectURL),
332 base::ASCIIToUTF16(chrome::kChromeUICreditsURL)); 267 base::ASCIIToUTF16(chrome::kChromeUICreditsURL));
333 localized_strings->SetString("productLicense", license); 268 html_source->AddString("aboutProductLicense", license);
269
270 html_source->AddBoolean("aboutObsolteNowOrSoon",
271 ObsoleteSystem::IsObsoleteNowOrSoon());
272 html_source->AddBoolean(
273 "aboutObsolteEndOfTheLine",
274 ObsoleteSystem::IsObsoleteNowOrSoon() &&
275 ObsoleteSystem::IsEndOfTheLine());
334 276
335 #if defined(OS_CHROMEOS) 277 #if defined(OS_CHROMEOS)
336 base::string16 os_license = l10n_util::GetStringFUTF16( 278 base::string16 os_license = l10n_util::GetStringFUTF16(
337 IDS_ABOUT_CROS_VERSION_LICENSE, 279 IDS_ABOUT_CROS_VERSION_LICENSE,
338 base::ASCIIToUTF16(chrome::kChromeUIOSCreditsURL)); 280 base::ASCIIToUTF16(chrome::kChromeUIOSCreditsURL));
339 localized_strings->SetString("productOsLicense", os_license); 281 html_source->AddString("aboutProductOsLicense", os_license);
340 282
341 base::string16 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME); 283 html_source->AddBoolean("aboutCanChangeChannel", CanChangeChannel(profile));
342 localized_strings->SetString( 284 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 285
353 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 286 base::Time build_time = base::SysInfo::GetLsbReleaseTime();
354 chromeos::switches::kDisableNewChannelSwitcherUI)) { 287 base::string16 build_date = base::TimeFormatFriendlyDate(build_time);
355 localized_strings->SetBoolean("disableNewChannelSwitcherUI", true); 288 html_source->AddString("aboutBuildDate", build_date);
356 }
357 #endif 289 #endif
358 290
359 base::string16 tos = l10n_util::GetStringFUTF16( 291 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 } 292 }
374 293
375 void HelpHandler::RegisterMessages() { 294 void AboutHandler::RegisterMessages() {
376 version_updater_.reset(VersionUpdater::Create(web_ui()->GetWebContents())); 295 // TODO(dpapad): Implement an "Unobserve" method and move this to
377 registrar_.Add(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED, 296 // |OnJavascriptAllowed| instead.
378 content::NotificationService::AllSources());
379 policy_registrar_.Observe( 297 policy_registrar_.Observe(
380 policy::key::kDeviceAutoUpdateDisabled, 298 policy::key::kDeviceAutoUpdateDisabled,
381 base::Bind(&HelpHandler::OnDeviceAutoUpdatePolicyChanged, 299 base::Bind(&AboutHandler::OnDeviceAutoUpdatePolicyChanged,
382 base::Unretained(this))); 300 base::Unretained(this)));
383 301
384 web_ui()->RegisterMessageCallback("onPageLoaded", 302 web_ui()->RegisterMessageCallback("refreshUpdateStatus",
385 base::Bind(&HelpHandler::OnPageLoaded, base::Unretained(this))); 303 base::Bind(&AboutHandler::HandleRefreshUpdateStatus,
304 base::Unretained(this)));
386 web_ui()->RegisterMessageCallback("relaunchNow", 305 web_ui()->RegisterMessageCallback("relaunchNow",
387 base::Bind(&HelpHandler::RelaunchNow, base::Unretained(this))); 306 base::Bind(&AboutHandler::HandleRelaunchNow, base::Unretained(this)));
388 web_ui()->RegisterMessageCallback("openFeedbackDialog", 307 web_ui()->RegisterMessageCallback("openFeedbackDialog",
389 base::Bind(&HelpHandler::OpenFeedbackDialog, base::Unretained(this))); 308 base::Bind(&AboutHandler::HandleOpenFeedbackDialog,
309 base::Unretained(this)));
390 web_ui()->RegisterMessageCallback("openHelpPage", 310 web_ui()->RegisterMessageCallback("openHelpPage",
391 base::Bind(&HelpHandler::OpenHelpPage, base::Unretained(this))); 311 base::Bind(&AboutHandler::HandleOpenHelpPage, base::Unretained(this)));
392 #if defined(OS_CHROMEOS) 312 #if defined(OS_CHROMEOS)
393 web_ui()->RegisterMessageCallback("setChannel", 313 web_ui()->RegisterMessageCallback("setChannel",
394 base::Bind(&HelpHandler::SetChannel, base::Unretained(this))); 314 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", 315 web_ui()->RegisterMessageCallback("requestUpdate",
398 base::Bind(&HelpHandler::RequestUpdate, base::Unretained(this))); 316 base::Bind(&AboutHandler::HandleRequestUpdate, base::Unretained(this)));
317 web_ui()->RegisterMessageCallback("getOsVersion",
318 base::Bind(&AboutHandler::HandleGetOsVersion, base::Unretained(this)));
319 web_ui()->RegisterMessageCallback("getArcVersion",
320 base::Bind(&AboutHandler::HandleGetArcVersion, base::Unretained(this)));
321 web_ui()->RegisterMessageCallback("getOsFirmware",
322 base::Bind(&AboutHandler::HandleGetOsFirmware, base::Unretained(this)));
323 web_ui()->RegisterMessageCallback("getRegulatoryInfo",
324 base::Bind(&AboutHandler::HandleGetRegulatoryInfo,
325 base::Unretained(this)));
326 web_ui()->RegisterMessageCallback("getCurrentChannel",
327 base::Bind(&AboutHandler::HandleGetCurrentChannel,
328 base::Unretained(this)));
329 web_ui()->RegisterMessageCallback("getTargetChannel",
330 base::Bind(&AboutHandler::HandleGetTargetChannel,
331 base::Unretained(this)));
399 #endif 332 #endif
400 #if defined(OS_MACOSX) 333 #if defined(OS_MACOSX)
401 web_ui()->RegisterMessageCallback("promoteUpdater", 334 web_ui()->RegisterMessageCallback("promoteUpdater",
402 base::Bind(&HelpHandler::PromoteUpdater, base::Unretained(this))); 335 base::Bind(&AboutHandler::PromoteUpdater, base::Unretained(this)));
403 #endif 336 #endif
404 337
405 #if defined(OS_CHROMEOS) 338 #if defined(OS_CHROMEOS)
406 // Handler for the product label image, which will be shown if available. 339 // Handler for the product label image, which will be shown if available.
407 content::URLDataSource::Add(Profile::FromWebUI(web_ui()), 340 content::URLDataSource::Add(Profile::FromWebUI(web_ui()),
408 new chromeos::ImageSource()); 341 new chromeos::ImageSource());
409 #endif 342 #endif
410 } 343 }
411 344
412 void HelpHandler::Observe(int type, const content::NotificationSource& source, 345 void AboutHandler::OnJavascriptAllowed() {
346 version_updater_.reset(VersionUpdater::Create(web_ui()->GetWebContents()));
347 registrar_.Add(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED,
348 content::NotificationService::AllSources());
349
350 }
351
352 void AboutHandler::OnJavascriptDisallowed() {
353 registrar_.Remove(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED,
354 content::NotificationService::AllSources());
355 }
356
357 void AboutHandler::Observe(int type, const content::NotificationSource& source,
413 const content::NotificationDetails& details) { 358 const content::NotificationDetails& details) {
414 switch (type) { 359 switch (type) {
415 case chrome::NOTIFICATION_UPGRADE_RECOMMENDED: { 360 case chrome::NOTIFICATION_UPGRADE_RECOMMENDED: {
416 // A version update is installed and ready to go. Refresh the UI so the 361 // A version update is installed and ready to go. Refresh the UI so the
417 // correct state will be shown. 362 // correct state will be shown.
418 RequestUpdate(NULL); 363 RequestUpdate();
419 break; 364 break;
420 } 365 }
421 default: 366 default:
422 NOTREACHED(); 367 NOTREACHED();
423 } 368 }
424 } 369 }
425 370
426 // static 371 // static
427 base::string16 HelpHandler::BuildBrowserVersionString() { 372 base::string16 AboutHandler::BuildBrowserVersionString() {
428 std::string version = version_info::GetVersionNumber(); 373 std::string version = version_info::GetVersionNumber();
429 374
430 std::string modifier = chrome::GetChannelString(); 375 std::string modifier = chrome::GetChannelString();
431 if (!modifier.empty()) 376 if (!modifier.empty())
432 version += " " + modifier; 377 version += " " + modifier;
433 378
434 #if defined(ARCH_CPU_64_BITS) 379 #if defined(ARCH_CPU_64_BITS)
435 version += " (64-bit)"; 380 version += " (64-bit)";
436 #endif 381 #endif
437 382
438 return base::UTF8ToUTF16(version); 383 return base::UTF8ToUTF16(version);
439 } 384 }
440 385
441 void HelpHandler::OnDeviceAutoUpdatePolicyChanged( 386 void AboutHandler::OnDeviceAutoUpdatePolicyChanged(
442 const base::Value* previous_policy, 387 const base::Value* previous_policy,
443 const base::Value* current_policy) { 388 const base::Value* current_policy) {
444 bool previous_auto_update_disabled = false; 389 bool previous_auto_update_disabled = false;
445 if (previous_policy) 390 if (previous_policy)
446 CHECK(previous_policy->GetAsBoolean(&previous_auto_update_disabled)); 391 CHECK(previous_policy->GetAsBoolean(&previous_auto_update_disabled));
447 392
448 bool current_auto_update_disabled = false; 393 bool current_auto_update_disabled = false;
449 if (current_policy) 394 if (current_policy)
450 CHECK(current_policy->GetAsBoolean(&current_auto_update_disabled)); 395 CHECK(current_policy->GetAsBoolean(&current_auto_update_disabled));
451 396
452 if (current_auto_update_disabled != previous_auto_update_disabled) { 397 if (current_auto_update_disabled != previous_auto_update_disabled) {
453 // Refresh the update status to refresh the status of the UI. 398 // Refresh the update status to refresh the status of the UI.
454 RefreshUpdateStatus(); 399 RefreshUpdateStatus();
455 } 400 }
456 } 401 }
457 402
458 void HelpHandler::RefreshUpdateStatus() { 403 void AboutHandler::HandleRefreshUpdateStatus(const base::ListValue* args) {
404 AllowJavascript();
405 RefreshUpdateStatus();
406 }
407
408 void AboutHandler::RefreshUpdateStatus() {
459 // On Chrome OS, do not check for an update automatically. 409 // On Chrome OS, do not check for an update automatically.
460 #if defined(OS_CHROMEOS) 410 #if defined(OS_CHROMEOS)
461 static_cast<VersionUpdaterCros*>(version_updater_.get())->GetUpdateStatus( 411 static_cast<VersionUpdaterCros*>(version_updater_.get())->GetUpdateStatus(
462 base::Bind(&HelpHandler::SetUpdateStatus, base::Unretained(this))); 412 base::Bind(&AboutHandler::SetUpdateStatus, base::Unretained(this)));
463 #else 413 #else
464 RequestUpdate(NULL); 414 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 415 #endif
529 } 416 }
530 417
531 #if defined(OS_MACOSX) 418 #if defined(OS_MACOSX)
532 void HelpHandler::PromoteUpdater(const base::ListValue* args) { 419 void AboutHandler::PromoteUpdater(const base::ListValue* args) {
533 version_updater_->PromoteUpdater(); 420 version_updater_->PromoteUpdater();
534 } 421 }
535 #endif 422 #endif
536 423
537 void HelpHandler::RelaunchNow(const base::ListValue* args) { 424 void AboutHandler::HandleRelaunchNow(const base::ListValue* args) {
538 DCHECK(args->empty()); 425 DCHECK(args->empty());
539 version_updater_->RelaunchBrowser(); 426 version_updater_->RelaunchBrowser();
540 } 427 }
541 428
542 void HelpHandler::OpenFeedbackDialog(const base::ListValue* args) { 429 void AboutHandler::HandleOpenFeedbackDialog(const base::ListValue* args) {
543 DCHECK(args->empty()); 430 DCHECK(args->empty());
544 Browser* browser = chrome::FindBrowserWithWebContents( 431 Browser* browser = chrome::FindBrowserWithWebContents(
545 web_ui()->GetWebContents()); 432 web_ui()->GetWebContents());
546 chrome::OpenFeedbackDialog(browser); 433 chrome::OpenFeedbackDialog(browser);
547 } 434 }
548 435
549 void HelpHandler::OpenHelpPage(const base::ListValue* args) { 436 void AboutHandler::HandleOpenHelpPage(const base::ListValue* args) {
550 DCHECK(args->empty()); 437 DCHECK(args->empty());
551 Browser* browser = chrome::FindBrowserWithWebContents( 438 Browser* browser = chrome::FindBrowserWithWebContents(
552 web_ui()->GetWebContents()); 439 web_ui()->GetWebContents());
553 chrome::ShowHelp(browser, chrome::HELP_SOURCE_WEBUI); 440 chrome::ShowHelp(browser, chrome::HELP_SOURCE_WEBUI);
554 } 441 }
555 442
556 #if defined(OS_CHROMEOS) 443 #if defined(OS_CHROMEOS)
557 444
558 void HelpHandler::SetChannel(const base::ListValue* args) { 445 void AboutHandler::HandleSetChannel(const base::ListValue* args) {
559 DCHECK(args->GetSize() == 2); 446 DCHECK(args->GetSize() == 2);
560 447
561 if (!CanChangeChannel(Profile::FromWebUI(web_ui()))) { 448 if (!CanChangeChannel(Profile::FromWebUI(web_ui()))) {
562 LOG(WARNING) << "Non-owner tried to change release track."; 449 LOG(WARNING) << "Non-owner tried to change release track.";
563 return; 450 return;
564 } 451 }
565 452
566 base::string16 channel; 453 base::string16 channel;
567 bool is_powerwash_allowed; 454 bool is_powerwash_allowed;
568 if (!args->GetString(0, &channel) || 455 if (!args->GetString(0, &channel) ||
569 !args->GetBoolean(1, &is_powerwash_allowed)) { 456 !args->GetBoolean(1, &is_powerwash_allowed)) {
570 LOG(ERROR) << "Can't parse SetChannel() args"; 457 LOG(ERROR) << "Can't parse SetChannel() args";
571 return; 458 return;
572 } 459 }
573 460
574 version_updater_->SetChannel(base::UTF16ToUTF8(channel), 461 version_updater_->SetChannel(base::UTF16ToUTF8(channel),
575 is_powerwash_allowed); 462 is_powerwash_allowed);
576 if (user_manager::UserManager::Get()->IsCurrentUserOwner()) { 463 if (user_manager::UserManager::Get()->IsCurrentUserOwner()) {
577 // Check for update after switching release channel. 464 // Check for update after switching release channel.
578 version_updater_->CheckForUpdate(base::Bind(&HelpHandler::SetUpdateStatus, 465 version_updater_->CheckForUpdate(base::Bind(&AboutHandler::SetUpdateStatus,
579 base::Unretained(this)), 466 base::Unretained(this)),
580 VersionUpdater::PromoteCallback()); 467 VersionUpdater::PromoteCallback());
581 } 468 }
582 } 469 }
583 470
584 void HelpHandler::RelaunchAndPowerwash(const base::ListValue* args) { 471 void AboutHandler::HandleGetOsVersion(const base::ListValue* args) {
585 DCHECK(args->empty()); 472 CHECK_EQ(1U, args->GetSize());
473 std::string callback_id;
474 CHECK(args->GetString(0, &callback_id));
586 475
587 if (IsEnterpriseManaged()) 476 base::PostTaskAndReplyWithResult(
588 return; 477 content::BrowserThread::GetBlockingPool(),
478 FROM_HERE,
479 base::Bind(&chromeos::version_loader::GetVersion,
480 chromeos::version_loader::VERSION_FULL),
481 base::Bind(&AboutHandler::OnVersionReady,
482 weak_factory_.GetWeakPtr(),
483 callback_id));
484 }
589 485
590 PrefService* prefs = g_browser_process->local_state(); 486 void AboutHandler::HandleGetArcVersion(const base::ListValue* args) {
591 prefs->SetBoolean(prefs::kFactoryResetRequested, true); 487 CHECK_EQ(1U, args->GetSize());
592 prefs->CommitPendingWrite(); 488 std::string callback_id;
489 CHECK(args->GetString(0, &callback_id));
593 490
594 // Perform sign out. Current chrome process will then terminate, new one will 491 base::PostTaskAndReplyWithResult(
595 // be launched (as if it was a restart). 492 content::BrowserThread::GetBlockingPool(),
596 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 493 FROM_HERE,
494 base::Bind(&chromeos::version_loader::GetARCVersion),
495 base::Bind(&AboutHandler::OnVersionReady,
496 weak_factory_.GetWeakPtr(),
497 callback_id));
498 }
499
500 void AboutHandler::HandleGetOsFirmware(const base::ListValue* args) {
501 CHECK_EQ(1U, args->GetSize());
502 std::string callback_id;
503 CHECK(args->GetString(0, &callback_id));
504
505 base::PostTaskAndReplyWithResult(
506 content::BrowserThread::GetBlockingPool(),
507 FROM_HERE,
508 base::Bind(&chromeos::version_loader::GetFirmware),
509 base::Bind(&AboutHandler::OnVersionReady,
510 weak_factory_.GetWeakPtr(),
511 callback_id));
512 }
513
514 void AboutHandler::OnVersionReady(std::string callback_id,
515 std::string version) {
516 ResolveJavascriptCallback(
517 base::StringValue(callback_id), base::StringValue(version));
518 }
519
520 void AboutHandler::HandleGetRegulatoryInfo(const base::ListValue* args) {
521 CHECK_EQ(1U, args->GetSize());
522 std::string callback_id;
523 CHECK(args->GetString(0, &callback_id));
524
525 base::PostTaskAndReplyWithResult(
526 content::BrowserThread::GetBlockingPool(),
527 FROM_HERE,
528 base::Bind(&FindRegulatoryLabelDir),
529 base::Bind(&AboutHandler::OnRegulatoryLabelDirFound,
530 weak_factory_.GetWeakPtr(),
531 callback_id));
532 }
533
534 void AboutHandler::HandleGetCurrentChannel(const base::ListValue* args) {
535 CHECK_EQ(1U, args->GetSize());
536 std::string callback_id;
537 CHECK(args->GetString(0, &callback_id));
538 // First argument to GetChannel() is a flag that indicates whether
539 // current channel should be returned (if true) or target channel
540 // (otherwise).
541 version_updater_->GetChannel(true,
542 base::Bind(&AboutHandler::OnGetChannelReady,
543 weak_factory_.GetWeakPtr(),
544 callback_id));
545 }
546
547 void AboutHandler::HandleGetTargetChannel(const base::ListValue* args) {
548 CHECK_EQ(1U, args->GetSize());
549 std::string callback_id;
550 CHECK(args->GetString(0, &callback_id));
551 version_updater_->GetChannel(false,
552 base::Bind(&AboutHandler::OnGetChannelReady,
553 weak_factory_.GetWeakPtr(),
554 callback_id));
555 }
556
557 void AboutHandler::OnGetChannelReady(std::string callback_id,
558 const std::string& channel) {
559 ResolveJavascriptCallback(
560 base::StringValue(callback_id), base::StringValue(channel));
561 }
562
563 void AboutHandler::HandleRequestUpdate(const base::ListValue* args) {
564 RequestUpdate();
597 } 565 }
598 566
599 #endif // defined(OS_CHROMEOS) 567 #endif // defined(OS_CHROMEOS)
600 568
601 void HelpHandler::RequestUpdate(const base::ListValue* args) { 569 void AboutHandler::RequestUpdate() {
602 VersionUpdater::PromoteCallback promote_callback;
603 version_updater_->CheckForUpdate( 570 version_updater_->CheckForUpdate(
604 base::Bind(&HelpHandler::SetUpdateStatus, base::Unretained(this)), 571 base::Bind(&AboutHandler::SetUpdateStatus, base::Unretained(this)),
605 #if defined(OS_MACOSX) 572 #if defined(OS_MACOSX)
606 base::Bind(&HelpHandler::SetPromotionState, base::Unretained(this))); 573 base::Bind(&AboutHandler::SetPromotionState, base::Unretained(this)));
607 #else 574 #else
608 VersionUpdater::PromoteCallback()); 575 VersionUpdater::PromoteCallback());
609 #endif // OS_MACOSX 576 #endif // OS_MACOSX
610 } 577 }
611 578
612 void HelpHandler::SetUpdateStatus(VersionUpdater::Status status, 579 void AboutHandler::SetUpdateStatus(VersionUpdater::Status status,
613 int progress, const base::string16& message) { 580 int progress, const base::string16& message) {
614 // Only UPDATING state should have progress set. 581 // Only UPDATING state should have progress set.
615 DCHECK(status == VersionUpdater::UPDATING || progress == 0); 582 DCHECK(status == VersionUpdater::UPDATING || progress == 0);
616 583
617 std::string status_str; 584 std::unique_ptr<base::DictionaryValue> event(new base::DictionaryValue);
618 switch (status) { 585 event->SetString("status", UpdateStatusToString(status));
619 case VersionUpdater::CHECKING: 586 event->SetString("message", message);
620 status_str = "checking"; 587 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 588
653 #if defined(OS_CHROMEOS) 589 #if defined(OS_CHROMEOS)
654 if (status == VersionUpdater::FAILED_OFFLINE || 590 if (status == VersionUpdater::FAILED_OFFLINE ||
655 status == VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED) { 591 status == VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED) {
656 base::string16 types_msg = GetAllowedConnectionTypesMessage(); 592 base::string16 types_msg = GetAllowedConnectionTypesMessage();
657 if (!types_msg.empty()) { 593 if (!types_msg.empty())
658 web_ui()->CallJavascriptFunction( 594 event->SetString("connectionTypes", types_msg);
659 "help.HelpPage.setAndShowAllowedConnectionTypesMsg", 595 else
660 base::StringValue(types_msg)); 596 event->Set("connectionTypes", base::Value::CreateNullValue());
661 } else {
662 web_ui()->CallJavascriptFunction(
663 "help.HelpPage.showAllowedConnectionTypesMsg",
664 base::FundamentalValue(false));
665 }
666 } else { 597 } else {
667 web_ui()->CallJavascriptFunction( 598 event->Set("connectionTypes", base::Value::CreateNullValue());
668 "help.HelpPage.showAllowedConnectionTypesMsg",
669 base::FundamentalValue(false));
670 } 599 }
671 #endif // defined(OS_CHROMEOS) 600 #endif // defined(OS_CHROMEOS)
601
602 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback",
tommycli 2016/05/10 22:14:52 Here and everywhere else, replace web_ui()->CallJa
dpapad 2016/05/10 23:49:53 Done.
603 base::StringValue("update-status-changed"),
604 *event);
672 } 605 }
673 606
674 #if defined(OS_MACOSX) 607 #if defined(OS_MACOSX)
675 void HelpHandler::SetPromotionState(VersionUpdater::PromotionState state) { 608 void AboutHandler::SetPromotionState(VersionUpdater::PromotionState state) {
676 std::string state_str; 609 std::string state_str;
677 switch (state) { 610 switch (state) {
678 case VersionUpdater::PROMOTE_HIDDEN: 611 case VersionUpdater::PROMOTE_HIDDEN:
679 state_str = "hidden"; 612 state_str = "hidden";
680 break; 613 break;
681 case VersionUpdater::PROMOTE_ENABLED: 614 case VersionUpdater::PROMOTE_ENABLED:
682 state_str = "enabled"; 615 state_str = "enabled";
683 break; 616 break;
684 case VersionUpdater::PROMOTE_DISABLED: 617 case VersionUpdater::PROMOTE_DISABLED:
685 state_str = "disabled"; 618 state_str = "disabled";
686 break; 619 break;
687 } 620 }
688 621
689 web_ui()->CallJavascriptFunction("help.HelpPage.setPromotionState", 622 web_ui()->CallJavascriptFunction("help.HelpPage.setPromotionState",
690 base::StringValue(state_str)); 623 base::StringValue(state_str));
691 } 624 }
692 #endif // defined(OS_MACOSX) 625 #endif // defined(OS_MACOSX)
693 626
694 #if defined(OS_CHROMEOS) 627 #if defined(OS_CHROMEOS)
695 void HelpHandler::OnOSVersion(const std::string& version) { 628 void AboutHandler::OnRegulatoryLabelDirFound(std::string callback_id,
696 web_ui()->CallJavascriptFunction("help.HelpPage.setOSVersion", 629 const base::FilePath& path) {
697 base::StringValue(version)); 630 if (path.empty()) {
698 } 631 ResolveJavascriptCallback(base::StringValue(callback_id),
699 632 *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; 633 return;
634 }
723 635
724 base::PostTaskAndReplyWithResult( 636 base::PostTaskAndReplyWithResult(
725 content::BrowserThread::GetBlockingPool(), FROM_HERE, 637 content::BrowserThread::GetBlockingPool(), FROM_HERE,
726 base::Bind(&ReadRegulatoryLabelText, path), 638 base::Bind(&ReadRegulatoryLabelText, path),
727 base::Bind(&HelpHandler::OnRegulatoryLabelTextRead, 639 base::Bind(&AboutHandler::OnRegulatoryLabelTextRead,
728 weak_factory_.GetWeakPtr())); 640 weak_factory_.GetWeakPtr(),
729 641 callback_id, path));
730 // Send the image path to the WebUI.
731 OnRegulatoryLabelImageFound(path.AppendASCII(kRegulatoryLabelImageFilename));
732 } 642 }
733 643
734 void HelpHandler::OnRegulatoryLabelImageFound(const base::FilePath& path) { 644 void AboutHandler::OnRegulatoryLabelTextRead(std::string callback_id,
645 const base::FilePath& path,
646 const std::string& text) {
647 std::unique_ptr<base::DictionaryValue> regulatory_info(
648 new base::DictionaryValue);
649 // Remove unnecessary whitespace.
650 regulatory_info->SetString("text", base::CollapseWhitespaceASCII(text, true));
735 std::string url = std::string("chrome://") + chrome::kChromeOSAssetHost + 651 std::string url = std::string("chrome://") + chrome::kChromeOSAssetHost +
736 "/" + path.MaybeAsASCII(); 652 "/" + path.MaybeAsASCII();
737 web_ui()->CallJavascriptFunction("help.HelpPage.setRegulatoryLabelPath", 653 regulatory_info->SetString("url", url);
738 base::StringValue(url));
739 }
740 654
741 void HelpHandler::OnRegulatoryLabelTextRead(const std::string& text) { 655 ResolveJavascriptCallback(
742 // Remove unnecessary whitespace. 656 base::StringValue(callback_id), *regulatory_info);
743 web_ui()->CallJavascriptFunction(
744 "help.HelpPage.setRegulatoryLabelText",
745 base::StringValue(base::CollapseWhitespaceASCII(text, true)));
746 } 657 }
747 658
748 #endif // defined(OS_CHROMEOS) 659 #endif // defined(OS_CHROMEOS)
660
661 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698