Home | History | Annotate | Download | only in ui
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_NETWORK_PROFILE_BUBBLE_H_
      6 #define CHROME_BROWSER_UI_NETWORK_PROFILE_BUBBLE_H_
      7 
      8 #include "base/basictypes.h"
      9 
     10 class Browser;
     11 class Profile;
     12 
     13 namespace base {
     14 class FilePath;
     15 }
     16 
     17 namespace user_prefs {
     18 class PrefRegistrySyncable;
     19 }
     20 
     21 // This class will try to detect if the profile is on a network share and if
     22 // this is the case notify the user with an info bubble.
     23 class NetworkProfileBubble {
     24  public:
     25   enum MetricNetworkedProfileCheck {
     26    // Check was suppressed by command line flag.
     27    METRIC_CHECK_SUPPRESSED,
     28    // WTSQuerySessionInformation call failed.
     29    METRIC_CHECK_FAILED,
     30    // File access in profile dir failed.
     31    METRIC_CHECK_IO_FAILED,
     32 
     33    // Profile on a network share detected.
     34    METRIC_PROFILE_ON_NETWORK,
     35    // Profile not on a network share detected.
     36    METRIC_PROFILE_NOT_ON_NETWORK,
     37 
     38    // Check was suppressed because of remote session.
     39    METRIC_REMOTE_SESSION,
     40 
     41    // User has clicked learn more on the notification bubble.
     42    METRIC_LEARN_MORE_CLICKED,
     43    // User has clicked OK on the notification bubble.
     44    METRIC_ACKNOWLEDGED,
     45 
     46    METRIC_NETWORKED_PROFILE_CHECK_SIZE  // Must be the last.
     47   };
     48 
     49   // Returns true if the check for network located profile should be done. This
     50   // test is only performed up to |kMaxWarnings| times in a row and then
     51   // repeated after a period of silence that lasts |kSilenceDurationDays| days.
     52   static bool ShouldCheckNetworkProfile(Profile* profile);
     53 
     54   // Verifies that the profile folder is not located on a network share, and if
     55   // it is shows the warning bubble to the user.
     56   static void CheckNetworkProfile(const base::FilePath& profile_folder);
     57 
     58   // Shows the notification bubble using the provided |browser|.
     59   static void ShowNotification(Browser* browser);
     60 
     61   static void SetNotificationShown(bool shown);
     62 
     63   // Register the pref that controls whether the bubble should be shown anymore.
     64   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
     65 
     66   // Helper function wrapping the UMA_HISTOGRAM_ENUMERATION macro.
     67   static void RecordUmaEvent(MetricNetworkedProfileCheck event);
     68 
     69  private:
     70   // This function creates the notification bubble, attaches it to the
     71   // |anchor| View and then shows it to the user.
     72   static void NotifyNetworkProfileDetected();
     73 
     74   // Set to true once the notification check has been performed to avoid showing
     75   // the notification more than once per browser run.
     76   // This flag is not thread-safe and should only be accessed on the UI thread!
     77   static bool notification_shown_;
     78 
     79   DISALLOW_IMPLICIT_CONSTRUCTORS(NetworkProfileBubble);
     80 };
     81 
     82 #endif  // CHROME_BROWSER_UI_NETWORK_PROFILE_BUBBLE_H_
     83