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

Unified Diff: chrome/browser/ui/startup/default_browser_prompt_win.cc

Issue 10539169: Prototype version of the first-run dialog for Windows 8 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: An oops. Created 8 years, 6 months 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
Index: chrome/browser/ui/startup/default_browser_prompt_win.cc
diff --git a/chrome/browser/ui/startup/default_browser_prompt_win.cc b/chrome/browser/ui/startup/default_browser_prompt_win.cc
new file mode 100644
index 0000000000000000000000000000000000000000..02c0ba0cc270071c4c3e7401fe1c8fecd02d90e7
--- /dev/null
+++ b/chrome/browser/ui/startup/default_browser_prompt_win.cc
@@ -0,0 +1,99 @@
+// Copyright (c) 2012 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/startup/default_browser_prompt.h"
+
+#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/shell_integration.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/webui/metroizer_ui_win.h"
+#include "chrome/common/pref_names.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_types.h"
+
+using content::BrowserThread;
+
+namespace {
+
+// Show the page prompting the user to make Chrome the default browser on
+// Windows 8 (which means becoming "the browser" in Metro mode). The page
+// will be shown at the first appropriate opportunity. It can be placed in
+// a tab or in a dialog, depending on other settings.
+class SetMetroBrowserFlowLauncher : public content::NotificationObserver {
+ public:
+ static void LaunchSoon(Profile* profile) {
+ // The instance will manage its own lifetime.
+ new SetMetroBrowserFlowLauncher(profile);
+ }
+
+ private:
+ explicit SetMetroBrowserFlowLauncher(Profile* profile)
+ : profile_(profile) {
+ registrar_.Add(this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
+ content::NotificationService::AllSources());
+ }
+
+ // content::NotificationObserver override:
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
+ content::NotificationRegistrar registrar_;
+ Profile* profile_;
+
+ DISALLOW_COPY_AND_ASSIGN(SetMetroBrowserFlowLauncher);
+};
+
+void CheckDefaultAndShowMetroizerCallback(Profile* profile,
sky 2012/06/20 22:34:45 nit: keep SetMetroBrowserFlowLauncher definition a
motek. 2012/06/21 18:28:10 Right. We don't really need this check anymore. It
+ Browser* browser,
+ bool dialog) {
+ if (!ShellIntegration::IsDefaultBrowser() &&
+ (ShellIntegration::CanSetAsDefaultBrowser() ==
+ ShellIntegration::SET_DEFAULT_INTERACTIVE)) {
+ MetroizerUI::Show(profile, browser, dialog);
sky 2012/06/20 22:34:45 MetroizerUI is an awful name. How about something
motek. 2012/06/21 18:28:10 Oh, bother. This was my favourite part. Gone now.
+ }
+}
+
+void SetMetroBrowserFlowLauncher::Observe(
+ int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) {
+ DCHECK_EQ(type, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME);
+ Browser* browser = browser::FindBrowserWithWebContents(
+ content::Source<content::WebContents>(source).ptr());
+
+ if (!browser || !browser->is_type_tabbed())
+ return;
+
+ // Unregister and delete.
+ registrar_.Remove(this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
+ content::NotificationService::AllSources());
+
+ bool as_dialog =
+ profile_->GetPrefs()->GetBoolean(prefs::kDefaultBrowserFlowDialog);
+ BrowserThread::PostTask(
sky 2012/06/20 22:34:45 Why is this delayed? Its entirely possible the bro
motek. 2012/06/21 18:28:10 I think that these 'is default' checks should be u
+ BrowserThread::FILE, FROM_HERE,
+ base::Bind(&CheckDefaultAndShowMetroizerCallback,
+ profile_, browser, as_dialog));
+ delete this;
+}
+
+} // namespace
+
+namespace browser {
+
+void ShowFirstRunDefaultBrowserPrompt(Profile* profile) {
+ if (ShellIntegration::CanSetAsDefaultBrowser() ==
+ ShellIntegration::SET_DEFAULT_INTERACTIVE) {
+ // If the only available mode of setting the default browser requires
+ // user interaction, it means this couldn't have been done yet. Perform
+ // this action as a delayed task (including the check).
+ SetMetroBrowserFlowLauncher::LaunchSoon(profile);
+ }
+}
+
+} // namespace browser

Powered by Google App Engine
This is Rietveld 408576698