// 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. #ifndef CHROME_BROWSER_UI_NETWORK_PROFILE_BUBBLE_H_ #define CHROME_BROWSER_UI_NETWORK_PROFILE_BUBBLE_H_ #include "base/basictypes.h" class Browser; class PrefRegistrySyncable; class Profile; namespace base { class FilePath; } // This class will try to detect if the profile is on a network share and if // this is the case notify the user with an info bubble. class NetworkProfileBubble { public: enum MetricNetworkedProfileCheck { // Check was suppressed by command line flag. METRIC_CHECK_SUPPRESSED, // WTSQuerySessionInformation call failed. METRIC_CHECK_FAILED, // File access in profile dir failed. METRIC_CHECK_IO_FAILED, // Profile on a network share detected. METRIC_PROFILE_ON_NETWORK, // Profile not on a network share detected. METRIC_PROFILE_NOT_ON_NETWORK, // Check was suppressed because of remote session. METRIC_REMOTE_SESSION, // User has clicked learn more on the notification bubble. METRIC_LEARN_MORE_CLICKED, // User has clicked OK on the notification bubble. METRIC_ACKNOWLEDGED, METRIC_NETWORKED_PROFILE_CHECK_SIZE // Must be the last. }; // Returns true if the check for network located profile should be done. This // test is only performed up to |kMaxWarnings| times in a row and then // repeated after a period of silence that lasts |kSilenceDurationDays| days. static bool ShouldCheckNetworkProfile(Profile* profile); // Verifies that the profile folder is not located on a network share, and if // it is shows the warning bubble to the user. static void CheckNetworkProfile(const base::FilePath& profile_folder); // Shows the notification bubble using the provided |browser|. static void ShowNotification(Browser* browser); static void SetNotificationShown(bool shown); // Register the pref that controls whether the bubble should be shown anymore. static void RegisterUserPrefs(PrefRegistrySyncable* registry); // Helper function wrapping the UMA_HISTOGRAM_ENUMERATION macro. static void RecordUmaEvent(MetricNetworkedProfileCheck event); private: // This function creates the notification bubble, attaches it to the // |anchor| View and then shows it to the user. static void NotifyNetworkProfileDetected(); // Set to true once the notification check has been performed to avoid showing // the notification more than once per browser run. // This flag is not thread-safe and should only be accessed on the UI thread! static bool notification_shown_; DISALLOW_IMPLICIT_CONSTRUCTORS(NetworkProfileBubble); }; #endif // CHROME_BROWSER_UI_NETWORK_PROFILE_BUBBLE_H_