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

Side by Side Diff: chrome/browser/search/hotword_audio_history_handler.cc

Issue 800523002: [Hotword] Sync Audio History pref every 24 hours, when opening chrome://settings and . . . (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/search/hotword_audio_history_handler.h" 5 #include "chrome/browser/search/hotword_audio_history_handler.h"
6 6
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "chrome/browser/extensions/api/hotword_private/hotword_private_api.h" 8 #include "chrome/browser/extensions/api/hotword_private/hotword_private_api.h"
9 #include "chrome/browser/history/web_history_service.h" 9 #include "chrome/browser/history/web_history_service.h"
10 #include "chrome/browser/history/web_history_service_factory.h" 10 #include "chrome/browser/history/web_history_service_factory.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/common/pref_names.h" 12 #include "chrome/common/pref_names.h"
13 13
14 using extensions::BrowserContextKeyedAPIFactory; 14 using extensions::BrowserContextKeyedAPIFactory;
15 using extensions::HotwordPrivateEventService; 15 using extensions::HotwordPrivateEventService;
16 16
17 // Max number of hours between audio history checks.
18 static const int kHoursUntilNextAudioHistoryCheck = 24;
19
17 HotwordAudioHistoryHandler::HotwordAudioHistoryHandler( 20 HotwordAudioHistoryHandler::HotwordAudioHistoryHandler(
18 content::BrowserContext* context) 21 content::BrowserContext* context,
19 : profile_(Profile::FromBrowserContext(context)), 22 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
23 : task_runner_(task_runner),
24 profile_(Profile::FromBrowserContext(context)),
20 weak_ptr_factory_(this) { 25 weak_ptr_factory_(this) {
21 } 26 }
22 27
23 HotwordAudioHistoryHandler::~HotwordAudioHistoryHandler() { 28 HotwordAudioHistoryHandler::~HotwordAudioHistoryHandler() {
24 } 29 }
25 30
26 history::WebHistoryService* HotwordAudioHistoryHandler::GetWebHistory() { 31 history::WebHistoryService* HotwordAudioHistoryHandler::GetWebHistory() {
27 return WebHistoryServiceFactory::GetForProfile(profile_); 32 return WebHistoryServiceFactory::GetForProfile(profile_);
28 } 33 }
29 34
35 void HotwordAudioHistoryHandler::UpdateAudioHistoryState() {
36 GetAudioHistoryEnabled(
37 base::Bind(&HotwordAudioHistoryHandler::UpdateLocalPreference,
38 weak_ptr_factory_.GetWeakPtr()));
39 // Set the function to update in a day.
40 task_runner_->PostDelayedTask(
41 FROM_HERE,
42 base::Bind(&HotwordAudioHistoryHandler::UpdateAudioHistoryState,
43 weak_ptr_factory_.GetWeakPtr()),
44 base::TimeDelta::FromHours(kHoursUntilNextAudioHistoryCheck));
45 }
46
47 void HotwordAudioHistoryHandler::UpdateLocalPreference(
48 bool success, bool new_enabled_value) {
49 if (success) {
50 PrefService* prefs = profile_->GetPrefs();
51 prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, new_enabled_value);
52 }
53 }
54
30 void HotwordAudioHistoryHandler::GetAudioHistoryEnabled( 55 void HotwordAudioHistoryHandler::GetAudioHistoryEnabled(
31 const HotwordAudioHistoryCallback& callback) { 56 const HotwordAudioHistoryCallback& callback) {
32 history::WebHistoryService* web_history = GetWebHistory(); 57 history::WebHistoryService* web_history = GetWebHistory();
33 if (web_history) { 58 if (web_history) {
34 web_history->GetAudioHistoryEnabled( 59 web_history->GetAudioHistoryEnabled(
35 base::Bind(&HotwordAudioHistoryHandler::GetAudioHistoryComplete, 60 base::Bind(&HotwordAudioHistoryHandler::GetAudioHistoryComplete,
36 weak_ptr_factory_.GetWeakPtr(), 61 weak_ptr_factory_.GetWeakPtr(),
37 callback)); 62 callback));
38 } else { 63 } else {
39 // If web_history is null, the user is not signed in so the opt-in 64 // If web_history is null, the user is not signed in. Set the opt-in value
40 // should be seen as false. Run the callback with false for success 65 // to the last known value and run the callback with false for success.
41 // and false for the enabled value.
42 PrefService* prefs = profile_->GetPrefs(); 66 PrefService* prefs = profile_->GetPrefs();
43 prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, false); 67 callback.Run(false, prefs->GetBoolean(prefs::kHotwordAudioLoggingEnabled));
44 callback.Run(false, false);
45 } 68 }
46 } 69 }
47 70
48 void HotwordAudioHistoryHandler::SetAudioHistoryEnabled( 71 void HotwordAudioHistoryHandler::SetAudioHistoryEnabled(
49 const bool enabled, 72 const bool enabled,
50 const HotwordAudioHistoryCallback& callback) { 73 const HotwordAudioHistoryCallback& callback) {
51 history::WebHistoryService* web_history = GetWebHistory(); 74 history::WebHistoryService* web_history = GetWebHistory();
52 if (web_history) { 75 if (web_history) {
53 web_history->SetAudioHistoryEnabled( 76 web_history->SetAudioHistoryEnabled(
54 enabled, 77 enabled,
55 base::Bind(&HotwordAudioHistoryHandler::SetAudioHistoryComplete, 78 base::Bind(&HotwordAudioHistoryHandler::SetAudioHistoryComplete,
56 weak_ptr_factory_.GetWeakPtr(), 79 weak_ptr_factory_.GetWeakPtr(),
57 enabled, 80 enabled,
58 callback)); 81 callback));
59 } else { 82 } else {
60 // If web_history is null, run the callback with false for success 83 // If web_history is null, run the callback with false for success
61 // and false for the enabled value. 84 // and return the last known value for the opt-in pref.
62 callback.Run(false, false); 85 PrefService* prefs = profile_->GetPrefs();
86 callback.Run(false, prefs->GetBoolean(prefs::kHotwordAudioLoggingEnabled));
63 } 87 }
64 } 88 }
65 89
66 void HotwordAudioHistoryHandler::GetAudioHistoryComplete( 90 void HotwordAudioHistoryHandler::GetAudioHistoryComplete(
67 const HotwordAudioHistoryCallback& callback, 91 const HotwordAudioHistoryCallback& callback,
68 bool success, bool new_enabled_value) { 92 bool success, bool new_enabled_value) {
93 // Initialize value to the last known value of the audio history pref.
69 PrefService* prefs = profile_->GetPrefs(); 94 PrefService* prefs = profile_->GetPrefs();
70 // Set preference to false if the call was not successful to err on the safe 95 bool value = prefs->GetBoolean(prefs::kHotwordAudioLoggingEnabled);
71 // side. 96 // If the call was successful, use the new value for updates.
72 bool new_value = success && new_enabled_value; 97 if (success) {
73 prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, new_value); 98 value = new_enabled_value;
74 99 prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, value);
75 callback.Run(success, new_value); 100 // If the setting is now turned off, always on should also be turned off.
101 if (!value)
102 prefs->SetBoolean(prefs::kHotwordAlwaysOnSearchEnabled, false);
103 }
104 callback.Run(success, value);
76 } 105 }
77 106
78 void HotwordAudioHistoryHandler::SetAudioHistoryComplete( 107 void HotwordAudioHistoryHandler::SetAudioHistoryComplete(
79 bool new_enabled_value, 108 bool new_enabled_value,
80 const HotwordAudioHistoryCallback& callback, 109 const HotwordAudioHistoryCallback& callback,
81 bool success, bool callback_enabled_value) { 110 bool success, bool callback_enabled_value) {
82 if (success) { 111 UpdateLocalPreference(success, new_enabled_value);
83 PrefService* prefs = profile_->GetPrefs();
84 prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, new_enabled_value);
85 }
86
87 callback.Run(success, new_enabled_value); 112 callback.Run(success, new_enabled_value);
88 } 113 }
OLDNEW
« no previous file with comments | « chrome/browser/search/hotword_audio_history_handler.h ('k') | chrome/browser/search/hotword_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698