summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/options/advanced_contents_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/options/advanced_contents_view.cc')
-rw-r--r--chrome/browser/views/options/advanced_contents_view.cc162
1 files changed, 162 insertions, 0 deletions
diff --git a/chrome/browser/views/options/advanced_contents_view.cc b/chrome/browser/views/options/advanced_contents_view.cc
index 6270e4f..3200494 100644
--- a/chrome/browser/views/options/advanced_contents_view.cc
+++ b/chrome/browser/views/options/advanced_contents_view.cc
@@ -19,6 +19,7 @@
#include "base/i18n/rtl.h"
#include "base/message_loop.h"
#include "base/path_service.h"
+#include "base/scoped_callback_factory.h"
#include "base/thread.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser.h"
@@ -32,6 +33,7 @@
#include "chrome/browser/prefs/pref_member.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/pref_set_observer.h"
+#include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
@@ -1365,6 +1367,161 @@ void ChromeAppsSection::NotifyPrefChanged(const std::string* pref_name) {
}
////////////////////////////////////////////////////////////////////////////////
+// CloudPrintProxySection
+
+class CloudPrintProxySection : public AdvancedSection,
+ public views::ButtonListener {
+ public:
+ explicit CloudPrintProxySection(Profile* profile);
+ virtual ~CloudPrintProxySection() {}
+
+ // Overridden from views::ButtonListener:
+ virtual void ButtonPressed(views::Button* sender, const views::Event& event);
+
+ // Callback that gets the cloud print proxy status.
+ void StatusCallback(bool enabled, std::string email);
+
+ protected:
+ // OptionsPageView overrides:
+ virtual void InitControlLayout();
+ virtual void NotifyPrefChanged(const std::string* pref_name);
+
+ private:
+ bool Enabled() const;
+
+ // Controls for this section:
+ views::Label* section_description_label_;
+ views::NativeButton* enable_disable_button_;
+ views::NativeButton* manage_printer_button_;
+
+ // Preferences we tie things to.
+ StringPrefMember cloud_print_proxy_email_;
+
+ base::ScopedCallbackFactory<CloudPrintProxySection> factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(CloudPrintProxySection);
+};
+
+CloudPrintProxySection::CloudPrintProxySection(Profile* profile)
+ : section_description_label_(NULL),
+ enable_disable_button_(NULL),
+ manage_printer_button_(NULL),
+ factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
+ AdvancedSection(profile,
+ l10n_util::GetString(
+ IDS_OPTIONS_ADVANCED_SECTION_TITLE_CLOUD_PRINT)) {
+}
+
+void CloudPrintProxySection::ButtonPressed(views::Button* sender,
+ const views::Event& event) {
+ if (sender == enable_disable_button_) {
+ if (Enabled()) {
+ // Enabled, we must be the disable button.
+ UserMetricsRecordAction(
+ UserMetricsAction("Options_DisableCloudPrintProxy"), NULL);
+ CloudPrintSetupFlow::DisableCloudPrintProxy(profile());
+ } else {
+ UserMetricsRecordAction(
+ UserMetricsAction("Options_EnableCloudPrintProxy"), NULL);
+ // We open a new browser window so the Options dialog doesn't
+ // get lost behind other windows.
+ CloudPrintSetupFlow::OpenDialog(profile());
+ }
+ } else if (sender == manage_printer_button_) {
+ // Open a new browser window for the management tab. The browser
+ // will go away when the user closes that tab.
+ Browser* browser = Browser::Create(profile());
+ // FIXME(scottbyer): Refactor Cloud Print URL creation.
+ // http://code.google.com/p/chromium/issues/detail?id=56850
+ browser->OpenURL(GURL("https://www.google.com/cloudprint/manage.html"),
+ GURL(), NEW_WINDOW, PageTransition::LINK);
+ }
+}
+
+void CloudPrintProxySection::StatusCallback(bool enabled, std::string email) {
+ profile()->GetPrefs()->SetString(prefs::kCloudPrintEmail,
+ enabled ? email : std::string());
+}
+
+void CloudPrintProxySection::InitControlLayout() {
+ AdvancedSection::InitControlLayout();
+
+ section_description_label_ = new views::Label(
+ l10n_util::GetString(IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL));
+ enable_disable_button_ = new views::NativeButton(this,
+ l10n_util::GetString(IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_BUTTON));
+ manage_printer_button_ = new views::NativeButton(this,
+ l10n_util::GetString(
+ IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_MANAGE_BUTTON));
+
+ GridLayout* layout = new GridLayout(contents_);
+ contents_->SetLayoutManager(layout);
+
+ const int single_column_view_set_id = 0;
+ AddWrappingColumnSet(layout, single_column_view_set_id);
+ const int control_view_set_id = 1;
+ AddDependentTwoColumnSet(layout, control_view_set_id);
+
+ // The description label at the top and label.
+ section_description_label_->SetMultiLine(true);
+ AddWrappingLabelRow(layout, section_description_label_,
+ single_column_view_set_id, true);
+
+ // The enable / disable button and manage button.
+ AddTwoColumnRow(layout, enable_disable_button_, manage_printer_button_, false,
+ control_view_set_id, kRelatedControlVerticalSpacing);
+
+ // Attach the preferences so we can flip things appropriately.
+ cloud_print_proxy_email_.Init(prefs::kCloudPrintEmail,
+ profile()->GetPrefs(), this);
+
+ // Start the UI off in the state we think it should be in.
+ std::string pref_string(prefs::kCloudPrintEmail);
+ NotifyPrefChanged(&pref_string);
+
+ // Kick off a task to ask the background service what the real
+ // answer is.
+ CloudPrintSetupFlow::RefreshPreferencesFromService(
+ profile(),
+ factory_.NewCallback(&CloudPrintProxySection::StatusCallback));
+}
+
+void CloudPrintProxySection::NotifyPrefChanged(const std::string* pref_name) {
+ if (pref_name == NULL)
+ return;
+
+ if (*pref_name == prefs::kCloudPrintEmail) {
+ if (Enabled()) {
+ std::string email;
+ if (profile()->GetPrefs()->HasPrefPath(prefs::kCloudPrintEmail))
+ email = profile()->GetPrefs()->GetString(prefs::kCloudPrintEmail);
+
+ section_description_label_->SetText(
+ l10n_util::GetStringF(IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_LABEL,
+ UTF8ToWide(email)));
+ enable_disable_button_->SetLabel(
+ l10n_util::GetString(IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_BUTTON));
+ enable_disable_button_->InvalidateLayout();
+ manage_printer_button_->SetVisible(true);
+ manage_printer_button_->InvalidateLayout();
+ } else {
+ section_description_label_->SetText(
+ l10n_util::GetString(IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL));
+ enable_disable_button_->SetLabel(
+ l10n_util::GetString(IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_BUTTON));
+ enable_disable_button_->InvalidateLayout();
+ manage_printer_button_->SetVisible(false);
+ }
+ Layout();
+ }
+}
+
+bool CloudPrintProxySection::Enabled() const {
+ return profile()->GetPrefs()->HasPrefPath(prefs::kCloudPrintEmail) &&
+ !profile()->GetPrefs()->GetString(prefs::kCloudPrintEmail).empty();
+}
+
+////////////////////////////////////////////////////////////////////////////////
// AdvancedContentsView
class AdvancedContentsView : public OptionsPageView {
@@ -1462,6 +1619,11 @@ void AdvancedContentsView::InitControlLayout() {
layout->StartRow(0, single_column_view_set_id);
layout->AddView(new SecuritySection(profile()));
if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableCloudPrintProxy)) {
+ layout->StartRow(0, single_column_view_set_id);
+ layout->AddView(new CloudPrintProxySection(profile()));
+ }
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableBackgroundMode)) {
layout->StartRow(0, single_column_view_set_id);
layout->AddView(new ChromeAppsSection(profile()));