OLD | NEW |
1 // Copyright 2016 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/chromeos/arc/arc_support_host.h" | 5 #include "chrome/browser/chromeos/arc/arc_support_host.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "ash/common/system/chromeos/devicetype_utils.h" | 9 #include "ash/common/system/chromeos/devicetype_utils.h" |
10 #include "base/i18n/timezone.h" | 10 #include "base/i18n/timezone.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
23 #include "chrome/grit/generated_resources.h" | 23 #include "chrome/grit/generated_resources.h" |
24 #include "components/metrics/metrics_pref_names.h" | 24 #include "components/metrics/metrics_pref_names.h" |
25 #include "components/prefs/pref_service.h" | 25 #include "components/prefs/pref_service.h" |
26 #include "components/user_manager/known_user.h" | 26 #include "components/user_manager/known_user.h" |
27 #include "ui/base/l10n/l10n_util.h" | 27 #include "ui/base/l10n/l10n_util.h" |
28 #include "ui/base/webui/web_ui_util.h" | 28 #include "ui/base/webui/web_ui_util.h" |
29 #include "ui/display/screen.h" | 29 #include "ui/display/screen.h" |
30 | 30 |
31 namespace { | 31 namespace { |
32 const char kAction[] = "action"; | 32 constexpr char kAction[] = "action"; |
33 const char kArcManaged[] = "arcManaged"; | 33 constexpr char kArcManaged[] = "arcManaged"; |
34 const char kCanEnable[] = "canEnable"; | 34 constexpr char kCanEnable[] = "canEnable"; |
35 const char kCode[] = "code"; | 35 constexpr char kData[] = "data"; |
36 const char kData[] = "data"; | 36 constexpr char kDeviceId[] = "deviceId"; |
37 const char kDeviceId[] = "deviceId"; | 37 constexpr char kEnabled[] = "enabled"; |
38 const char kEnabled[] = "enabled"; | 38 constexpr char kManaged[] = "managed"; |
39 const char kManaged[] = "managed"; | 39 constexpr char kOn[] = "on"; |
40 const char kOn[] = "on"; | 40 constexpr char kPage[] = "page"; |
41 const char kPage[] = "page"; | 41 constexpr char kStatus[] = "status"; |
42 const char kStatus[] = "status"; | 42 constexpr char kText[] = "text"; |
43 const char kText[] = "text"; | 43 constexpr char kActionInitialize[] = "initialize"; |
44 const char kActionInitialize[] = "initialize"; | 44 constexpr char kActionSetMetricsMode[] = "setMetricsMode"; |
45 const char kActionSetMetricsMode[] = "setMetricsMode"; | 45 constexpr char kActionBackupAndRestoreMode[] = "setBackupAndRestoreMode"; |
46 const char kActionBackupAndRestoreMode[] = "setBackupAndRestoreMode"; | 46 constexpr char kActionLocationServiceMode[] = "setLocationServiceMode"; |
47 const char kActionLocationServiceMode[] = "setLocationServiceMode"; | 47 constexpr char kActionSetWindowBounds[] = "setWindowBounds"; |
48 const char kActionSetWindowBounds[] = "setWindowBounds"; | 48 constexpr char kActionCloseWindow[] = "closeWindow"; |
49 const char kActionStartLso[] = "startLso"; | 49 constexpr char kActionShowPage[] = "showPage"; |
50 const char kActionSetAuthCode[] = "setAuthCode"; | |
51 const char kActionEnableMetrics[] = "enableMetrics"; | |
52 const char kActionSendFeedback[] = "sendFeedback"; | |
53 const char kActionSetBackupRestore[] = "setBackupRestore"; | |
54 const char kActionSetLocationService[] = "setLocationService"; | |
55 const char kActionCloseWindow[] = "closeWindow"; | |
56 const char kActionShowPage[] = "showPage"; | |
57 | 50 |
58 // Fired when the extension window is closed. | 51 // The JSON data sent from the extension should have at least "event" field. |
59 const char kActionOnWindowClosed[] = "onWindowClosed"; | 52 // Each event data is defined below. |
| 53 // The key of the event type. |
| 54 constexpr char kEvent[] = "event"; |
| 55 |
| 56 // "onWindowClosed" is fired when the extension window is closed. |
| 57 // No data will be provided. |
| 58 constexpr char kEventOnWindowClosed[] = "onWindowClosed"; |
| 59 |
| 60 // "onAuthSucceeded" is fired when successfully done to LSO authorization in |
| 61 // extension. |
| 62 // The auth token is passed via "code" field. |
| 63 constexpr char kEventOnAuthSuccedded[] = "onAuthSucceeded"; |
| 64 constexpr char kCode[] = "code"; |
| 65 |
| 66 // "onAgree" is fired when a user clicks "Agree" button. |
| 67 // The message should have the following three fields: |
| 68 // - isMetricsEnabled |
| 69 // - isBackupRestoreEnabled |
| 70 // - isLocationServiceEnabled |
| 71 constexpr char kEventOnAgreed[] = "onAgreed"; |
| 72 constexpr char kIsMetricsEnabled[] = "isMetricsEnabled"; |
| 73 constexpr char kIsBackupRestoreEnabled[] = "isBackupRestoreEnabled"; |
| 74 constexpr char kIsLocationServiceEnabled[] = "isLocationServiceEnabled"; |
| 75 |
| 76 // "onSendFeedbackClicked" is fired when a user clicks "Send Feedback" button. |
| 77 constexpr char kEventOnSendFeedbackClicked[] = "onSendFeedbackClicked"; |
60 | 78 |
61 } // namespace | 79 } // namespace |
62 | 80 |
63 // static | 81 // static |
64 const char ArcSupportHost::kHostName[] = "com.google.arc_support"; | 82 const char ArcSupportHost::kHostName[] = "com.google.arc_support"; |
65 | 83 |
66 // static | 84 // static |
67 const char ArcSupportHost::kHostAppId[] = "cnbgggchhmkkdmeppjobngjoejnihlei"; | 85 const char ArcSupportHost::kHostAppId[] = "cnbgggchhmkkdmeppjobngjoejnihlei"; |
68 | 86 |
69 // static | 87 // static |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 pref_service->SetBoolean(prefs::kArcBackupRestoreEnabled, is_enabled); | 358 pref_service->SetBoolean(prefs::kArcBackupRestoreEnabled, is_enabled); |
341 } | 359 } |
342 | 360 |
343 void ArcSupportHost::EnableLocationService(bool is_enabled) { | 361 void ArcSupportHost::EnableLocationService(bool is_enabled) { |
344 arc::ArcAuthService* arc_auth_service = arc::ArcAuthService::Get(); | 362 arc::ArcAuthService* arc_auth_service = arc::ArcAuthService::Get(); |
345 DCHECK(arc_auth_service && arc_auth_service->IsAllowed()); | 363 DCHECK(arc_auth_service && arc_auth_service->IsAllowed()); |
346 PrefService* pref_service = arc_auth_service->profile()->GetPrefs(); | 364 PrefService* pref_service = arc_auth_service->profile()->GetPrefs(); |
347 pref_service->SetBoolean(prefs::kArcLocationServiceEnabled, is_enabled); | 365 pref_service->SetBoolean(prefs::kArcLocationServiceEnabled, is_enabled); |
348 } | 366 } |
349 | 367 |
350 void ArcSupportHost::OnMessage(const std::string& request_string) { | 368 void ArcSupportHost::OnMessage(const std::string& message_string) { |
351 std::unique_ptr<base::Value> request_value = | 369 std::unique_ptr<base::Value> message_value = |
352 base::JSONReader::Read(request_string); | 370 base::JSONReader::Read(message_string); |
353 base::DictionaryValue* request; | 371 base::DictionaryValue* message; |
354 if (!request_value || !request_value->GetAsDictionary(&request)) { | 372 if (!message_value || !message_value->GetAsDictionary(&message)) { |
355 NOTREACHED(); | 373 NOTREACHED(); |
356 return; | 374 return; |
357 } | 375 } |
358 | 376 |
359 std::string action; | 377 std::string event; |
360 if (!request->GetString(kAction, &action)) { | 378 if (!message->GetString(kEvent, &event)) { |
361 NOTREACHED(); | 379 NOTREACHED(); |
362 return; | 380 return; |
363 } | 381 } |
364 | 382 |
| 383 // TODO(hidehiko): Replace by Observer. |
365 arc::ArcAuthService* arc_auth_service = arc::ArcAuthService::Get(); | 384 arc::ArcAuthService* arc_auth_service = arc::ArcAuthService::Get(); |
366 DCHECK(arc_auth_service); | 385 DCHECK(arc_auth_service); |
367 | 386 |
368 if (action == kActionStartLso) { | 387 if (event == kEventOnWindowClosed) { |
369 arc_auth_service->StartLso(); | |
370 } else if (action == kActionSetAuthCode) { | |
371 std::string code; | |
372 if (!request->GetString(kCode, &code)) { | |
373 NOTREACHED(); | |
374 return; | |
375 } | |
376 arc_auth_service->SetAuthCodeAndStartArc(code); | |
377 } else if (action == kActionOnWindowClosed) { | |
378 if (!close_requested_) | 388 if (!close_requested_) |
379 arc_auth_service->CancelAuthCode(); | 389 arc_auth_service->CancelAuthCode(); |
380 } else if (action == kActionEnableMetrics) { | 390 } else if (event == kEventOnAuthSuccedded) { |
381 bool is_enabled; | 391 std::string code; |
382 if (!request->GetBoolean(kEnabled, &is_enabled)) { | 392 if (message->GetString(kCode, &code)) { |
| 393 arc_auth_service->SetAuthCodeAndStartArc(code); |
| 394 } else { |
383 NOTREACHED(); | 395 NOTREACHED(); |
384 return; | |
385 } | 396 } |
386 EnableMetrics(is_enabled); | 397 } else if (event == kEventOnAgreed) { |
387 } else if (action == kActionSendFeedback) { | 398 bool is_metrics_enabled; |
| 399 bool is_backup_restore_enabled; |
| 400 bool is_location_service_enabled; |
| 401 if (message->GetBoolean(kIsMetricsEnabled, &is_metrics_enabled) && |
| 402 message->GetBoolean(kIsBackupRestoreEnabled, |
| 403 &is_backup_restore_enabled) && |
| 404 message->GetBoolean(kIsLocationServiceEnabled, |
| 405 &is_location_service_enabled)) { |
| 406 EnableMetrics(is_metrics_enabled); |
| 407 EnableBackupRestore(is_backup_restore_enabled); |
| 408 EnableLocationService(is_location_service_enabled); |
| 409 arc_auth_service->StartLso(); |
| 410 } else { |
| 411 NOTREACHED(); |
| 412 } |
| 413 } else if (event == kEventOnSendFeedbackClicked) { |
388 chrome::OpenFeedbackDialog(nullptr); | 414 chrome::OpenFeedbackDialog(nullptr); |
389 } else if (action == kActionSetBackupRestore) { | |
390 bool is_enabled; | |
391 if (!request->GetBoolean(kEnabled, &is_enabled)) { | |
392 NOTREACHED(); | |
393 return; | |
394 } | |
395 EnableBackupRestore(is_enabled); | |
396 } else if (action == kActionSetLocationService) { | |
397 bool is_enabled; | |
398 if (!request->GetBoolean(kEnabled, &is_enabled)) { | |
399 NOTREACHED(); | |
400 return; | |
401 } | |
402 EnableLocationService(is_enabled); | |
403 } else { | 415 } else { |
| 416 LOG(ERROR) << "Unknown message: " << message_string; |
404 NOTREACHED(); | 417 NOTREACHED(); |
405 } | 418 } |
406 } | 419 } |
407 | 420 |
408 scoped_refptr<base::SingleThreadTaskRunner> ArcSupportHost::task_runner() | 421 scoped_refptr<base::SingleThreadTaskRunner> ArcSupportHost::task_runner() |
409 const { | 422 const { |
410 return base::ThreadTaskRunnerHandle::Get(); | 423 return base::ThreadTaskRunnerHandle::Get(); |
411 } | 424 } |
OLD | NEW |