Chromium Code Reviews| Index: chrome/browser/extensions/api/settings_private/settings_private_event_router.cc |
| diff --git a/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc b/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc |
| index f42e2ef98f92d0e5a7ff9316f84b53124b5edd27..7b0a47eec8e04beb2613dcc24c8e00f452078262 100644 |
| --- a/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc |
| +++ b/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| +#include "base/task_scheduler/post_task.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -20,7 +21,7 @@ namespace extensions { |
| SettingsPrivateEventRouter::SettingsPrivateEventRouter( |
| content::BrowserContext* context) |
| - : context_(context), listening_(false) { |
| + : context_(context), listening_(false), weak_ptr_factory_(this) { |
| // Register with the event router so we know when renderers are listening to |
| // our events. We first check and see if there *is* an event router, because |
| // some unit tests try to create all context services, but don't initialize |
| @@ -123,6 +124,15 @@ void SettingsPrivateEventRouter::StartOrStopListeningForPrefsChanges() { |
| void SettingsPrivateEventRouter::OnPreferenceChanged( |
| const std::string& pref_name) { |
| + // This posts an asynchronous task to ensure that all pref stores are updated, |
| + // as |pref_utils_->GetPref()| relies on this information to determine if a |
|
Devlin
2017/03/10 20:01:24
s/pref_utils/prefs_util
Dan Beam
2017/03/10 20:06:22
Done.
|
| + // preference is controlled by e.g. extensions. |
| + base::PostTask(FROM_HERE, |
| + base::Bind(&SettingsPrivateEventRouter::SendPrefChange, |
| + weak_ptr_factory_.GetWeakPtr(), pref_name)); |
| +} |
| + |
| +void SettingsPrivateEventRouter::SendPrefChange(const std::string& pref_name) { |
| EventRouter* event_router = EventRouter::Get(context_); |
| if (!event_router->HasEventListener( |
| api::settings_private::OnPrefsChanged::kEventName)) { |