// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/ui/webui/settings/on_startup_handler.h" #include #include "base/bind.h" #include "base/bind_helpers.h" #include "base/logging.h" #include "chrome/browser/extensions/settings_api_helpers.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/settings_utils.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_ui.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/management_policy.h" #include "extensions/common/extension.h" namespace settings { // static const char OnStartupHandler::kOnStartupNtpExtensionEventName[] = "update-ntp-extension"; OnStartupHandler::OnStartupHandler(Profile* profile) : extension_registry_observer_(this), profile_(profile) { DCHECK(profile); } OnStartupHandler::~OnStartupHandler() {} void OnStartupHandler::OnJavascriptAllowed() { extension_registry_observer_.Add( extensions::ExtensionRegistry::Get(profile_)); } void OnStartupHandler::OnJavascriptDisallowed() { extension_registry_observer_.RemoveAll(); } void OnStartupHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "getNtpExtension", base::BindRepeating(&OnStartupHandler::HandleGetNtpExtension, base::Unretained(this))); web_ui()->RegisterMessageCallback( "validateStartupPage", base::BindRepeating(&OnStartupHandler::HandleValidateStartupPage, base::Unretained(this))); } void OnStartupHandler::OnExtensionUnloaded( content::BrowserContext* browser_context, const extensions::Extension* extension, extensions::UnloadedExtensionReason reason) { FireWebUIListener(kOnStartupNtpExtensionEventName, *GetNtpExtension()); } void OnStartupHandler::OnExtensionReady( content::BrowserContext* browser_context, const extensions::Extension* extension) { FireWebUIListener(kOnStartupNtpExtensionEventName, *GetNtpExtension()); } std::unique_ptr OnStartupHandler::GetNtpExtension() { const extensions::Extension* ntp_extension = extensions::GetExtensionOverridingNewTabPage(profile_); if (!ntp_extension) { std::unique_ptr none(new base::Value); return none; } std::unique_ptr dict(new base::DictionaryValue); dict->SetString("id", ntp_extension->id()); dict->SetString("name", ntp_extension->name()); dict->SetBoolean("canBeDisabled", !extensions::ExtensionSystem::Get(profile_) ->management_policy() ->MustRemainEnabled(ntp_extension, nullptr)); return dict; } void OnStartupHandler::HandleGetNtpExtension(const base::ListValue* args) { const base::Value* callback_id; CHECK(args->Get(0, &callback_id)); AllowJavascript(); ResolveJavascriptCallback(*callback_id, *GetNtpExtension()); } void OnStartupHandler::HandleValidateStartupPage(const base::ListValue* args) { CHECK_EQ(args->GetSize(), 2U); const base::Value* callback_id; CHECK(args->Get(0, &callback_id)); std::string url_string; CHECK(args->GetString(1, &url_string)); AllowJavascript(); bool valid = settings_utils::FixupAndValidateStartupPage(url_string, nullptr); ResolveJavascriptCallback(*callback_id, base::Value(valid)); } } // namespace settings