Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/extensions/api/developer_private/developer_private_api. h" | 5 #include "chrome/browser/extensions/api/developer_private/developer_private_api. h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 const char kFileSelectionCanceled[] = | 96 const char kFileSelectionCanceled[] = |
| 97 "File selection was canceled."; | 97 "File selection was canceled."; |
| 98 const char kNoSuchRendererError[] = "No such renderer."; | 98 const char kNoSuchRendererError[] = "No such renderer."; |
| 99 const char kInvalidPathError[] = "Invalid path."; | 99 const char kInvalidPathError[] = "Invalid path."; |
| 100 const char kManifestKeyIsRequiredError[] = | 100 const char kManifestKeyIsRequiredError[] = |
| 101 "The 'manifestKey' argument is required for manifest files."; | 101 "The 'manifestKey' argument is required for manifest files."; |
| 102 const char kCouldNotFindWebContentsError[] = | 102 const char kCouldNotFindWebContentsError[] = |
| 103 "Could not find a valid web contents."; | 103 "Could not find a valid web contents."; |
| 104 const char kCannotUpdateSupervisedProfileSettingsError[] = | 104 const char kCannotUpdateSupervisedProfileSettingsError[] = |
| 105 "Cannot change settings for a supervised profile."; | 105 "Cannot change settings for a supervised profile."; |
| 106 const char kCannotUpdatePolicyControlledProfileSettingsError[] = | |
| 107 "Cannot change policy-controlled settings."; | |
| 106 const char kNoOptionsPageForExtensionError[] = | 108 const char kNoOptionsPageForExtensionError[] = |
| 107 "Extension does not have an options page."; | 109 "Extension does not have an options page."; |
| 108 | 110 |
| 109 const char kUnpackedAppsFolder[] = "apps_target"; | 111 const char kUnpackedAppsFolder[] = "apps_target"; |
| 110 const char kManifestFile[] = "manifest.json"; | 112 const char kManifestFile[] = "manifest.json"; |
| 111 | 113 |
| 112 ExtensionService* GetExtensionService(content::BrowserContext* context) { | 114 ExtensionService* GetExtensionService(content::BrowserContext* context) { |
| 113 return ExtensionSystem::Get(context)->extension_service(); | 115 return ExtensionSystem::Get(context)->extension_service(); |
| 114 } | 116 } |
| 115 | 117 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 InstallVerifier::Get(context)->VerifyAllExtensions(); | 162 InstallVerifier::Get(context)->VerifyAllExtensions(); |
| 161 } | 163 } |
| 162 | 164 |
| 163 std::unique_ptr<developer::ProfileInfo> CreateProfileInfo(Profile* profile) { | 165 std::unique_ptr<developer::ProfileInfo> CreateProfileInfo(Profile* profile) { |
| 164 std::unique_ptr<developer::ProfileInfo> info(new developer::ProfileInfo()); | 166 std::unique_ptr<developer::ProfileInfo> info(new developer::ProfileInfo()); |
| 165 info->is_supervised = profile->IsSupervised(); | 167 info->is_supervised = profile->IsSupervised(); |
| 166 PrefService* prefs = profile->GetPrefs(); | 168 PrefService* prefs = profile->GetPrefs(); |
| 167 info->is_incognito_available = | 169 info->is_incognito_available = |
| 168 IncognitoModePrefs::GetAvailability(prefs) != | 170 IncognitoModePrefs::GetAvailability(prefs) != |
| 169 IncognitoModePrefs::DISABLED; | 171 IncognitoModePrefs::DISABLED; |
| 172 info->is_developer_mode_disabled_by_policy = | |
| 173 prefs->GetBoolean(prefs::kDevToolsDisabled); | |
| 170 info->in_developer_mode = | 174 info->in_developer_mode = |
| 171 !info->is_supervised && | 175 !info->is_supervised && |
| 176 !info->is_developer_mode_disabled_by_policy && | |
| 172 prefs->GetBoolean(prefs::kExtensionsUIDeveloperMode); | 177 prefs->GetBoolean(prefs::kExtensionsUIDeveloperMode); |
| 173 info->app_info_dialog_enabled = CanShowAppInfoDialog(); | 178 info->app_info_dialog_enabled = CanShowAppInfoDialog(); |
| 174 info->can_load_unpacked = | 179 info->can_load_unpacked = |
| 175 !ExtensionManagementFactory::GetForBrowserContext(profile) | 180 !ExtensionManagementFactory::GetForBrowserContext(profile) |
| 176 ->BlacklistedByDefault(); | 181 ->BlacklistedByDefault(); |
| 177 return info; | 182 return info; |
| 178 } | 183 } |
| 179 | 184 |
| 180 } // namespace | 185 } // namespace |
| 181 | 186 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 227 extension_management_observer_.Add( | 232 extension_management_observer_.Add( |
| 228 ExtensionManagementFactory::GetForBrowserContext(profile)); | 233 ExtensionManagementFactory::GetForBrowserContext(profile)); |
| 229 command_service_observer_.Add(CommandService::Get(profile)); | 234 command_service_observer_.Add(CommandService::Get(profile)); |
| 230 pref_change_registrar_.Init(profile->GetPrefs()); | 235 pref_change_registrar_.Init(profile->GetPrefs()); |
| 231 // The unretained is safe, since the PrefChangeRegistrar unregisters the | 236 // The unretained is safe, since the PrefChangeRegistrar unregisters the |
| 232 // callback on destruction. | 237 // callback on destruction. |
| 233 pref_change_registrar_.Add( | 238 pref_change_registrar_.Add( |
| 234 prefs::kExtensionsUIDeveloperMode, | 239 prefs::kExtensionsUIDeveloperMode, |
| 235 base::Bind(&DeveloperPrivateEventRouter::OnProfilePrefChanged, | 240 base::Bind(&DeveloperPrivateEventRouter::OnProfilePrefChanged, |
| 236 base::Unretained(this))); | 241 base::Unretained(this))); |
| 242 pref_change_registrar_.Add( | |
| 243 prefs::kDevToolsDisabled, | |
| 244 base::Bind(&DeveloperPrivateEventRouter::OnDevToolsDisabledChanged, | |
| 245 base::Unretained(this))); | |
| 237 } | 246 } |
| 238 | 247 |
| 239 DeveloperPrivateEventRouter::~DeveloperPrivateEventRouter() { | 248 DeveloperPrivateEventRouter::~DeveloperPrivateEventRouter() { |
| 240 } | 249 } |
| 241 | 250 |
| 242 void DeveloperPrivateEventRouter::AddExtensionId( | 251 void DeveloperPrivateEventRouter::AddExtensionId( |
| 243 const std::string& extension_id) { | 252 const std::string& extension_id) { |
| 244 extension_ids_.insert(extension_id); | 253 extension_ids_.insert(extension_id); |
| 245 } | 254 } |
| 246 | 255 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 365 | 374 |
| 366 void DeveloperPrivateEventRouter::OnProfilePrefChanged() { | 375 void DeveloperPrivateEventRouter::OnProfilePrefChanged() { |
| 367 std::unique_ptr<base::ListValue> args(new base::ListValue()); | 376 std::unique_ptr<base::ListValue> args(new base::ListValue()); |
| 368 args->Append(CreateProfileInfo(profile_)->ToValue()); | 377 args->Append(CreateProfileInfo(profile_)->ToValue()); |
| 369 std::unique_ptr<Event> event( | 378 std::unique_ptr<Event> event( |
| 370 new Event(events::DEVELOPER_PRIVATE_ON_PROFILE_STATE_CHANGED, | 379 new Event(events::DEVELOPER_PRIVATE_ON_PROFILE_STATE_CHANGED, |
| 371 developer::OnProfileStateChanged::kEventName, std::move(args))); | 380 developer::OnProfileStateChanged::kEventName, std::move(args))); |
| 372 event_router_->BroadcastEvent(std::move(event)); | 381 event_router_->BroadcastEvent(std::move(event)); |
| 373 } | 382 } |
| 374 | 383 |
| 384 void DeveloperPrivateEventRouter::OnDevToolsDisabledChanged() { | |
| 385 PrefService* prefs = profile_->GetPrefs(); | |
| 386 | |
| 387 // Ensure that the developer mode is off if it is disabled by policy | |
| 388 if (prefs->GetBoolean(prefs::kDevToolsDisabled)) | |
| 389 prefs->SetBoolean(prefs::kExtensionsUIDeveloperMode, false); | |
|
Bernhard Bauer
2016/11/25 15:43:35
Could you set this value via the ConfigurationPoli
pmarko
2016/11/28 14:19:30
Thank you for pointing this out -- done. Your sugg
| |
| 390 | |
| 391 // Be sure to generate a notification to the UI to show/hide the | |
| 392 // 'controlled by policy' indicator | |
| 393 OnProfilePrefChanged(); | |
| 394 } | |
| 395 | |
| 375 void DeveloperPrivateEventRouter::BroadcastItemStateChanged( | 396 void DeveloperPrivateEventRouter::BroadcastItemStateChanged( |
| 376 developer::EventType event_type, | 397 developer::EventType event_type, |
| 377 const std::string& extension_id) { | 398 const std::string& extension_id) { |
| 378 std::unique_ptr<ExtensionInfoGenerator> info_generator( | 399 std::unique_ptr<ExtensionInfoGenerator> info_generator( |
| 379 new ExtensionInfoGenerator(profile_)); | 400 new ExtensionInfoGenerator(profile_)); |
| 380 ExtensionInfoGenerator* info_generator_weak = info_generator.get(); | 401 ExtensionInfoGenerator* info_generator_weak = info_generator.get(); |
| 381 info_generator_weak->CreateExtensionInfo( | 402 info_generator_weak->CreateExtensionInfo( |
| 382 extension_id, | 403 extension_id, |
| 383 base::Bind(&DeveloperPrivateEventRouter::BroadcastItemStateChangedHelper, | 404 base::Bind(&DeveloperPrivateEventRouter::BroadcastItemStateChangedHelper, |
| 384 weak_factory_.GetWeakPtr(), event_type, extension_id, | 405 weak_factory_.GetWeakPtr(), event_type, extension_id, |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 593 DeveloperPrivateUpdateProfileConfigurationFunction::Run() { | 614 DeveloperPrivateUpdateProfileConfigurationFunction::Run() { |
| 594 std::unique_ptr<developer::UpdateProfileConfiguration::Params> params( | 615 std::unique_ptr<developer::UpdateProfileConfiguration::Params> params( |
| 595 developer::UpdateProfileConfiguration::Params::Create(*args_)); | 616 developer::UpdateProfileConfiguration::Params::Create(*args_)); |
| 596 EXTENSION_FUNCTION_VALIDATE(params); | 617 EXTENSION_FUNCTION_VALIDATE(params); |
| 597 | 618 |
| 598 const developer::ProfileConfigurationUpdate& update = params->update; | 619 const developer::ProfileConfigurationUpdate& update = params->update; |
| 599 PrefService* prefs = GetProfile()->GetPrefs(); | 620 PrefService* prefs = GetProfile()->GetPrefs(); |
| 600 if (update.in_developer_mode) { | 621 if (update.in_developer_mode) { |
| 601 if (GetProfile()->IsSupervised()) | 622 if (GetProfile()->IsSupervised()) |
| 602 return RespondNow(Error(kCannotUpdateSupervisedProfileSettingsError)); | 623 return RespondNow(Error(kCannotUpdateSupervisedProfileSettingsError)); |
| 624 if (prefs->GetBoolean(prefs::kDevToolsDisabled)) | |
| 625 return RespondNow(Error( | |
|
Bernhard Bauer
2016/11/25 15:43:35
This is a multi-line statement, so the block needs
pmarko
2016/11/28 14:19:30
Done.
| |
| 626 kCannotUpdatePolicyControlledProfileSettingsError)); | |
| 603 prefs->SetBoolean(prefs::kExtensionsUIDeveloperMode, | 627 prefs->SetBoolean(prefs::kExtensionsUIDeveloperMode, |
| 604 *update.in_developer_mode); | 628 *update.in_developer_mode); |
| 605 } | 629 } |
| 606 | 630 |
| 607 return RespondNow(NoArguments()); | 631 return RespondNow(NoArguments()); |
| 608 } | 632 } |
| 609 | 633 |
| 610 DeveloperPrivateUpdateExtensionConfigurationFunction:: | 634 DeveloperPrivateUpdateExtensionConfigurationFunction:: |
| 611 ~DeveloperPrivateUpdateExtensionConfigurationFunction() {} | 635 ~DeveloperPrivateUpdateExtensionConfigurationFunction() {} |
| 612 | 636 |
| (...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1453 update.extension_id, update.command_name, *update.keybinding); | 1477 update.extension_id, update.command_name, *update.keybinding); |
| 1454 } | 1478 } |
| 1455 | 1479 |
| 1456 return RespondNow(NoArguments()); | 1480 return RespondNow(NoArguments()); |
| 1457 } | 1481 } |
| 1458 | 1482 |
| 1459 | 1483 |
| 1460 } // namespace api | 1484 } // namespace api |
| 1461 | 1485 |
| 1462 } // namespace extensions | 1486 } // namespace extensions |
| OLD | NEW |