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

Unified Diff: ios/chrome/browser/ui/webui/flags_ui.cc

Issue 1500533002: Upstream chrome://flags & chrome://ui-alternatives iOS WebUI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add components/flags_ui/resources/apple_flags.css to PRESUBMIT blacklist Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/chrome/browser/ui/webui/flags_ui.h ('k') | ios/chrome/ios_chrome.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/ui/webui/flags_ui.cc
diff --git a/chrome/browser/ui/webui/flags_ui.cc b/ios/chrome/browser/ui/webui/flags_ui.cc
similarity index 46%
copy from chrome/browser/ui/webui/flags_ui.cc
copy to ios/chrome/browser/ui/webui/flags_ui.cc
index 48c7920b68fc10c7874930db0dd801e898bcc476..95153375391a60291480c470ea91f87532d2491a 100644
--- a/chrome/browser/ui/webui/flags_ui.cc
+++ b/ios/chrome/browser/ui/webui/flags_ui.cc
@@ -1,73 +1,62 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2015 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/flags_ui.h"
+#include "ios/chrome/browser/ui/webui/flags_ui.h"
#include <string>
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/bind_helpers.h"
#include "base/memory/ref_counted_memory.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/pref_service.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
-#include "chrome/browser/about_flags.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/lifetime/application_lifetime.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/channel_info.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/common/url_constants.h"
#include "components/flags_ui/flags_ui_constants.h"
#include "components/flags_ui/flags_ui_pref_names.h"
#include "components/flags_ui/pref_service_flags_storage.h"
#include "components/version_info/version_info.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_ui.h"
-#include "content/public/browser/web_ui_data_source.h"
-#include "content/public/browser/web_ui_message_handler.h"
#include "grit/components_chromium_strings.h"
#include "grit/components_google_chrome_strings.h"
#include "grit/components_resources.h"
#include "grit/components_scaled_resources.h"
#include "grit/components_strings.h"
+#include "ios/chrome/browser/about_flags.h"
+#include "ios/chrome/browser/application_context.h"
+#include "ios/chrome/browser/chrome_url_constants.h"
+#include "ios/public/provider/chrome/browser/browser_state/chrome_browser_state.h"
+#include "ios/public/provider/web/web_ui_ios.h"
+#include "ios/public/provider/web/web_ui_ios_message_handler.h"
+#include "ios/web/public/web_ui_ios_data_source.h"
+#include "ios/web/public/web_ui_ios_data_source.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
-#if defined(OS_CHROMEOS)
-#include "base/sys_info.h"
-#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
-#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
-#include "chrome/browser/chromeos/settings/cros_settings.h"
-#include "chrome/browser/chromeos/settings/owner_flags_storage.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/session_manager_client.h"
-#include "components/pref_registry/pref_registry_syncable.h"
-#include "components/user_manager/user_manager.h"
-#endif
-
-using content::WebContents;
-using content::WebUIMessageHandler;
-
namespace {
-content::WebUIDataSource* CreateFlagsUIHTMLSource() {
- content::WebUIDataSource* source =
- content::WebUIDataSource::Create(chrome::kChromeUIFlagsHost);
-
- source->AddLocalizedString(flags_ui::kFlagsLongTitle,
- IDS_FLAGS_UI_LONG_TITLE);
- source->AddLocalizedString(flags_ui::kFlagsTableTitle,
- IDS_FLAGS_UI_TABLE_TITLE);
+web::WebUIIOSDataSource* CreateFlagsUIHTMLSource(
+ BaseFlagsUI::FlagsUIKind flags_ui_kind) {
+ web::WebUIIOSDataSource* source = web::WebUIIOSDataSource::Create(
+ flags_ui_kind == BaseFlagsUI::FLAGS_UI_APPLE ? kChromeUIAppleFlagsHost
+ : kChromeUIFlagsHost);
+
+ if (flags_ui_kind == BaseFlagsUI::FLAGS_UI_APPLE) {
+ source->AddLocalizedString(flags_ui::kFlagsTableTitle,
+ IDS_FLAGS_UI_ALTERNATIVES_UI_TABLE_TITLE);
+ source->AddLocalizedString(
+ flags_ui::kFlagsNoExperimentsAvailable,
+ IDS_FLAGS_UI_ALTERNATIVES_UI_NO_EXPERIMENTS_AVAILABLE);
+ } else {
+ source->AddLocalizedString(flags_ui::kFlagsLongTitle,
+ IDS_FLAGS_UI_LONG_TITLE);
+ source->AddLocalizedString(flags_ui::kFlagsTableTitle,
+ IDS_FLAGS_UI_TABLE_TITLE);
+ }
source->AddLocalizedString(flags_ui::kFlagsWarningHeader,
IDS_FLAGS_UI_WARNING_HEADER);
source->AddLocalizedString(flags_ui::kFlagsBlurb, IDS_FLAGS_UI_WARNING_TEXT);
- source->AddLocalizedString(flags_ui::kChannelPromoBeta,
- IDS_FLAGS_UI_PROMOTE_BETA_CHANNEL);
- source->AddLocalizedString(flags_ui::kChannelPromoDev,
- IDS_FLAGS_UI_PROMOTE_DEV_CHANNEL);
source->AddLocalizedString(flags_ui::kFlagsUnsupportedTableTitle,
IDS_FLAGS_UI_UNSUPPORTED_TABLE_TITLE);
source->AddLocalizedString(flags_ui::kFlagsNotSupported,
@@ -81,25 +70,11 @@ content::WebUIDataSource* CreateFlagsUIHTMLSource() {
source->AddLocalizedString(flags_ui::kDisable, IDS_FLAGS_UI_DISABLE);
source->AddLocalizedString(flags_ui::kEnable, IDS_FLAGS_UI_ENABLE);
-#if defined(OS_CHROMEOS)
- if (!user_manager::UserManager::Get()->IsCurrentUserOwner() &&
- base::SysInfo::IsRunningOnChromeOS()) {
- // Set the strings to show which user can actually change the flags.
- std::string owner;
- chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner);
- source->AddString(flags_ui::kOwnerWarning,
- l10n_util::GetStringFUTF16(IDS_FLAGS_UI_SYSTEM_OWNER_ONLY,
- base::UTF8ToUTF16(owner)));
- } else {
- // The warning will be only shown on ChromeOS, when the current user is not
- // the owner.
- source->AddString(flags_ui::kOwnerWarning, base::string16());
- }
-#endif
-
source->SetJsonPath("strings.js");
source->AddResourcePath(flags_ui::kFlagsJS, IDR_FLAGS_UI_FLAGS_JS);
- source->SetDefaultResource(IDR_FLAGS_UI_FLAGS_HTML);
+ source->SetDefaultResource(flags_ui_kind == BaseFlagsUI::FLAGS_UI_APPLE
+ ? IDR_APPLE_FLAGS_HTML
+ : IDR_FLAGS_UI_FLAGS_HTML);
return source;
}
@@ -110,18 +85,17 @@ content::WebUIDataSource* CreateFlagsUIHTMLSource() {
////////////////////////////////////////////////////////////////////////////////
// The handler for Javascript messages for the about:flags page.
-class FlagsDOMHandler : public WebUIMessageHandler {
+class FlagsDOMHandler : public web::WebUIIOSMessageHandler {
public:
- FlagsDOMHandler() : access_(flags_ui::kGeneralAccessFlagsOnly),
- experimental_features_requested_(false) {
- }
+ FlagsDOMHandler()
+ : access_(flags_ui::kGeneralAccessFlagsOnly),
+ experimental_features_requested_(false) {}
~FlagsDOMHandler() override {}
// Initializes the DOM handler with the provided flags storage and flags
// access. If there were flags experiments requested from javascript before
// this was called, it calls |HandleRequestExperimentalFeatures| again.
- void Init(flags_ui::FlagsStorage* flags_storage,
- flags_ui::FlagAccess access);
+ void Init(flags_ui::FlagsStorage* flags_storage, flags_ui::FlagAccess access);
// WebUIMessageHandler implementation.
void RegisterMessages() override;
@@ -186,27 +160,17 @@ void FlagsDOMHandler::HandleRequestExperimentalFeatures(
scoped_ptr<base::ListValue> supported_features(new base::ListValue);
scoped_ptr<base::ListValue> unsupported_features(new base::ListValue);
- about_flags::GetFlagFeatureEntries(flags_storage_.get(),
- access_,
- supported_features.get(),
- unsupported_features.get());
+ GetFlagFeatureEntries(flags_storage_.get(), access_, supported_features.get(),
+ unsupported_features.get());
results.Set(flags_ui::kSupportedFeatures, supported_features.release());
results.Set(flags_ui::kUnsupportedFeatures, unsupported_features.release());
- results.SetBoolean(flags_ui::kNeedsRestart,
- about_flags::IsRestartNeededToCommitChanges());
+ // Cannot restart the browser on iOS.
+ results.SetBoolean(flags_ui::kNeedsRestart, false);
results.SetBoolean(flags_ui::kShowOwnerWarning,
access_ == flags_ui::kGeneralAccessFlagsOnly);
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
- version_info::Channel channel = chrome::GetChannel();
- results.SetBoolean(flags_ui::kShowBetaChannelPromotion,
- channel == version_info::Channel::STABLE);
- results.SetBoolean(flags_ui::kShowDevChannelPromotion,
- channel == version_info::Channel::BETA);
-#else
results.SetBoolean(flags_ui::kShowBetaChannelPromotion, false);
results.SetBoolean(flags_ui::kShowDevChannelPromotion, false);
-#endif
web_ui()->CallJavascriptFunction(flags_ui::kReturnExperimentalFeatures,
results);
}
@@ -224,114 +188,75 @@ void FlagsDOMHandler::HandleEnableExperimentalFeatureMessage(
!args->GetString(1, &enable_str))
return;
- about_flags::SetFeatureEntryEnabled(flags_storage_.get(), entry_internal_name,
- enable_str == "true");
+ SetFeatureEntryEnabled(flags_storage_.get(), entry_internal_name,
+ enable_str == "true");
}
void FlagsDOMHandler::HandleRestartBrowser(const base::ListValue* args) {
- DCHECK(flags_storage_);
-#if defined(OS_CHROMEOS)
- // On ChromeOS be less intrusive and restart inside the user session after
- // we apply the newly selected flags.
- base::CommandLine user_flags(base::CommandLine::NO_PROGRAM);
- about_flags::ConvertFlagsToSwitches(flags_storage_.get(),
- &user_flags,
- flags_ui::kAddSentinels);
- base::CommandLine::StringVector flags;
- // argv[0] is the program name |base::CommandLine::NO_PROGRAM|.
- flags.assign(user_flags.argv().begin() + 1, user_flags.argv().end());
- VLOG(1) << "Restarting to apply per-session flags...";
- chromeos::DBusThreadManager::Get()
- ->GetSessionManagerClient()
- ->SetFlagsForUser(
- user_manager::UserManager::Get()->GetActiveUser()->email(), flags);
-#endif
- chrome::AttemptRestart();
+ NOTREACHED();
}
void FlagsDOMHandler::HandleResetAllFlags(const base::ListValue* args) {
DCHECK(flags_storage_);
- about_flags::ResetAllFlags(flags_storage_.get());
+ ResetAllFlags(flags_storage_.get());
}
-
-#if defined(OS_CHROMEOS)
-// On ChromeOS verifying if the owner is signed in is async operation and only
-// after finishing it the UI can be properly populated. This function is the
-// callback for whether the owner is signed in. It will respectively pick the
-// proper PrefService for the flags interface.
-void FinishInitialization(base::WeakPtr<FlagsUI> flags_ui,
- Profile* profile,
- FlagsDOMHandler* dom_handler,
- bool current_user_is_owner) {
- // If the flags_ui has gone away, there's nothing to do.
- if (!flags_ui)
- return;
-
- // On Chrome OS the owner can set system wide flags and other users can only
- // set flags for their own session.
- // Note that |dom_handler| is owned by the web ui that owns |flags_ui|, so
- // it is still alive if |flags_ui| is.
- if (current_user_is_owner) {
- chromeos::OwnerSettingsServiceChromeOS* service =
- chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
- profile);
- dom_handler->Init(new chromeos::about_flags::OwnerFlagsStorage(
- profile->GetPrefs(), service),
- flags_ui::kOwnerAccessToFlags);
- } else {
- dom_handler->Init(
- new flags_ui::PrefServiceFlagsStorage(profile->GetPrefs()),
- flags_ui::kGeneralAccessFlagsOnly);
- }
-}
-#endif
-
} // namespace
///////////////////////////////////////////////////////////////////////////////
//
-// FlagsUI
+// BaseFlagsUI
//
///////////////////////////////////////////////////////////////////////////////
-FlagsUI::FlagsUI(content::WebUI* web_ui)
- : WebUIController(web_ui),
- weak_factory_(this) {
- Profile* profile = Profile::FromWebUI(web_ui);
+BaseFlagsUI::BaseFlagsUI(web::WebUIIOS* web_ui, FlagsUIKind flags_ui_kind)
+ : web::WebUIIOSController(web_ui), weak_factory_(this) {
+ Initialize(web_ui, flags_ui_kind);
+}
+void BaseFlagsUI::Initialize(web::WebUIIOS* web_ui, FlagsUIKind flags_ui_kind) {
FlagsDOMHandler* handler = new FlagsDOMHandler();
web_ui->AddMessageHandler(handler);
-#if defined(OS_CHROMEOS)
- if (base::SysInfo::IsRunningOnChromeOS() &&
- chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
- profile)) {
- chromeos::OwnerSettingsServiceChromeOS* service =
- chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
- profile);
- service->IsOwnerAsync(base::Bind(
- &FinishInitialization, weak_factory_.GetWeakPtr(), profile, handler));
- } else {
- FinishInitialization(weak_factory_.GetWeakPtr(), profile, handler,
- false /* current_user_is_owner */);
- }
-#else
- handler->Init(
- new flags_ui::PrefServiceFlagsStorage(g_browser_process->local_state()),
- flags_ui::kOwnerAccessToFlags);
-#endif
+ flags_ui::FlagAccess flag_access = flags_ui::kOwnerAccessToFlags;
+ if (flags_ui_kind == FLAGS_UI_APPLE)
+ flag_access = flags_ui::kAppleReviewAccessToFlags;
+ handler->Init(new flags_ui::PrefServiceFlagsStorage(
+ GetApplicationContext()->GetLocalState()),
+ flag_access);
// Set up the about:flags source.
- content::WebUIDataSource::Add(profile, CreateFlagsUIHTMLSource());
+ web::WebUIIOSDataSource::Add(ios::ChromeBrowserState::FromWebUIIOS(web_ui),
+ CreateFlagsUIHTMLSource(flags_ui_kind));
}
-FlagsUI::~FlagsUI() {
-}
+BaseFlagsUI::~BaseFlagsUI() {}
// static
-base::RefCountedMemory* FlagsUI::GetFaviconResourceBytes(
- ui::ScaleFactor scale_factor) {
- return ResourceBundle::GetSharedInstance().
- LoadDataResourceBytesForScale(IDR_FLAGS_FAVICON, scale_factor);
+base::RefCountedMemory* BaseFlagsUI::GetFaviconResourceBytes(
+ ui::ScaleFactor scale_factor) {
+ return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
+ IDR_FLAGS_FAVICON, scale_factor);
}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// FlagsUI
+//
+///////////////////////////////////////////////////////////////////////////////
+
+FlagsUI::FlagsUI(web::WebUIIOS* web_ui)
+ : BaseFlagsUI(web_ui, BaseFlagsUI::FLAGS_UI_GENERIC) {}
+
+FlagsUI::~FlagsUI() {}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// AppleFlagsUI
+//
+///////////////////////////////////////////////////////////////////////////////
+
+AppleFlagsUI::AppleFlagsUI(web::WebUIIOS* web_ui)
+ : BaseFlagsUI(web_ui, BaseFlagsUI::FLAGS_UI_APPLE) {}
+
+AppleFlagsUI::~AppleFlagsUI() {}
« no previous file with comments | « ios/chrome/browser/ui/webui/flags_ui.h ('k') | ios/chrome/ios_chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698