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

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: Gyp wrestling. 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..61d6f9e3fdeb3118976cd68f77a771b5f8da7e59
--- /dev/null
+++ b/chrome/browser/ui/startup/default_browser_prompt_win.cc
@@ -0,0 +1,89 @@
+// 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/set_as_metro_default_ui.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 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);
+
+ SetAsMetroDefaultUI::Show(profile_, browser, as_dialog);
+ delete this;
+}
+
+} // namespace
+
+namespace browser {
+
+void ShowFirstRunDefaultBrowserPrompt(Profile* profile) {
+ if ((ShellIntegration::IsDefaultBrowser() ==
+ ShellIntegration::NOT_DEFAULT_WEB_CLIENT) &&
grt (UTC plus 2) 2012/06/21 23:12:08 nit: indent one more space
motek. 2012/06/22 16:42:13 I hate Visual Studio with all my hart! Done.
+ (ShellIntegration::CanSetAsDefaultBrowser() ==
+ ShellIntegration::SET_DEFAULT_INTERACTIVE)) {
grt (UTC plus 2) 2012/06/21 23:12:08 nit: indent one less space
motek. 2012/06/22 16:42:13 Done.
+ // 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