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

Unified Diff: chrome/browser/settings_app_monitor_win.h

Issue 2003553003: Report user actions for interactions with the Windows Settings app. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pmonette review Created 4 years, 7 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/settings_app_monitor_win.h
diff --git a/chrome/browser/settings_app_monitor_win.h b/chrome/browser/settings_app_monitor_win.h
new file mode 100644
index 0000000000000000000000000000000000000000..cfc7d7b3995f5e6ae96f843d96cd8a8601cb54a0
--- /dev/null
+++ b/chrome/browser/settings_app_monitor_win.h
@@ -0,0 +1,79 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SETTINGS_APP_MONITOR_WIN_H_
+#define CHROME_BROWSER_SETTINGS_APP_MONITOR_WIN_H_
+
+#include <windows.h>
+
+#include "base/callback_forward.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_piece.h"
+#include "base/threading/thread.h"
+#include "base/threading/thread_checker.h"
+
+namespace shell_integration {
+namespace win {
+
+// A monitor that watches the Windows Settings app and notifies a delegate of
+// particularly interesting events. An asychronous initialization procedure is
+// started at instance creation, after which the delegate's |OnInitialized|
+// method is invoked. Following successful initilization, the monitor is ready
+// to observe the Settings app.
+class SettingsAppMonitor {
+ public:
+ class Delegate {
+ public:
+ virtual ~Delegate() {}
+
+ // Invoked to indicate that initialization is complete. |result| indicates
+ // whether or not the operation succeeded and, if not, the reason for
+ // failure.
+ virtual void OnInitialized(HRESULT result) = 0;
+
+ // Invoked when the Settings app has received keyboard focus.
+ virtual void OnAppFocused() = 0;
+
+ // Invoked when the user has invoked the Web browser chooser.
+ virtual void OnChooserInvoked() = 0;
+
+ // Invoked when the user has chosen a particular Web browser.
+ virtual void OnBrowserChosen(const base::string16& browser_name) = 0;
+ };
+
+ // |delegate| must outlive the monitor.
+ explicit SettingsAppMonitor(Delegate* delegate);
+ ~SettingsAppMonitor();
+
+ private:
+ class Context;
+
+ // Methods for passing actions on to the instance's Delegate.
+ void OnInitialized(HRESULT result);
+ void OnAppFocused();
+ void OnChooserInvoked();
+ void OnBrowserChosen(const base::string16& browser_name);
+
+ base::ThreadChecker thread_checker_;
+ Delegate* delegate_;
+
+ // A thread in the COM MTA in which automation calls are made.
+ base::Thread automation_thread_;
+
+ // A pointer to the context object that lives on the automation thread.
+ base::WeakPtr<Context> context_;
+
+ // A factory for the weak pointer handed to |context_|, through which
+ // notifications to the delegate are passed.
+ base::WeakPtrFactory<SettingsAppMonitor> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(SettingsAppMonitor);
+};
+
+} // namespace win
+} // namespace shell_integration
+
+#endif // CHROME_BROWSER_SETTINGS_APP_MONITOR_WIN_H_

Powered by Google App Engine
This is Rietveld 408576698