Home | History | Annotate | Download | only in profile_resetter
      1 // Copyright (c) 2013 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_PROFILE_RESETTER_RESETTABLE_SETTINGS_SNAPSHOT_H_
      6 #define CHROME_BROWSER_PROFILE_RESETTER_RESETTABLE_SETTINGS_SNAPSHOT_H_
      7 
      8 #include <string>
      9 #include <utility>
     10 #include <vector>
     11 
     12 #include "base/basictypes.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "base/memory/weak_ptr.h"
     15 #include "base/strings/string_split.h"
     16 #include "chrome/browser/prefs/session_startup_pref.h"
     17 #include "chrome/browser/profile_resetter/profile_resetter.h"
     18 
     19 namespace base {
     20 class ListValue;
     21 }
     22 
     23 // ResettableSettingsSnapshot captures some settings values at constructor. It
     24 // can calculate the difference between two snapshots. That is, modified fields.
     25 class ResettableSettingsSnapshot {
     26  public:
     27   // ExtensionList is a vector of pairs. The first component is the extension
     28   // id, the second is the name.
     29   typedef base::StringPairs ExtensionList;
     30   // All types of settings handled by this class.
     31   enum Field {
     32     STARTUP_MODE = 1 << 0,
     33     HOMEPAGE = 1 << 1,
     34     DSE_URL = 1 << 2,
     35     EXTENSIONS = 1 << 3,
     36     SHORTCUTS = 1 << 4,
     37 
     38     ALL_FIELDS = STARTUP_MODE | HOMEPAGE | DSE_URL | EXTENSIONS | SHORTCUTS,
     39   };
     40 
     41   explicit ResettableSettingsSnapshot(Profile* profile);
     42   ~ResettableSettingsSnapshot();
     43 
     44   // Getters.
     45   const std::vector<GURL>& startup_urls() const { return startup_.urls; }
     46 
     47   SessionStartupPref::Type startup_type() const { return startup_.type; }
     48 
     49   const std::string& homepage() const { return homepage_; }
     50 
     51   bool homepage_is_ntp() const { return homepage_is_ntp_; }
     52 
     53   bool show_home_button() const { return show_home_button_; }
     54 
     55   const std::string& dse_url() const { return dse_url_; }
     56 
     57   const ExtensionList& enabled_extensions() const {
     58     return enabled_extensions_;
     59   }
     60 
     61   const std::vector<ShortcutCommand>& shortcuts() const {
     62     return shortcuts_;
     63   }
     64 
     65   bool shortcuts_determined() const {
     66     return shortcuts_determined_;
     67   }
     68 
     69   // Substitutes |enabled_extensions_| with
     70   // |enabled_extensions_|\|snapshot.enabled_extensions_|.
     71   void Subtract(const ResettableSettingsSnapshot& snapshot);
     72 
     73   // For each member 'm' compares |this->m| with |snapshot.m| and sets the
     74   // corresponding |ResetableSettingsSnapshot::Field| bit to 1 in case of
     75   // difference.
     76   // The return value is a bit mask of Field values signifying which members
     77   // were different.
     78   int FindDifferentFields(const ResettableSettingsSnapshot& snapshot) const;
     79 
     80   // Collects the shortcuts asynchronously and calls |callback|. If the request
     81   // has been made already, noop.
     82   void RequestShortcuts(const base::Closure& callback);
     83 
     84  private:
     85   // Fills the |shortcuts_| member and calls |callback|.
     86   void SetShortcutsAndReport(
     87       const base::Closure& callback,
     88       const std::vector<ShortcutCommand>& shortcuts);
     89 
     90   // Startup pages. URLs are always stored sorted.
     91   SessionStartupPref startup_;
     92 
     93   std::string homepage_;
     94   bool homepage_is_ntp_;
     95   bool show_home_button_;
     96 
     97   // Default search engine.
     98   std::string dse_url_;
     99 
    100   // List of pairs [id, name] for enabled extensions. Always sorted.
    101   ExtensionList enabled_extensions_;
    102 
    103   // Chrome shortcuts (e.g. icons on the Windows desktop, etc.) with non-empty
    104   // arguments.
    105   std::vector<ShortcutCommand> shortcuts_;
    106 
    107   // |shortcuts_| were retrieved.
    108   bool shortcuts_determined_;
    109 
    110   // The flag to cancel shortcuts retrieving.
    111   scoped_refptr<SharedCancellationFlag> cancellation_flag_;
    112 
    113   base::WeakPtrFactory<ResettableSettingsSnapshot> weak_ptr_factory_;
    114 
    115   DISALLOW_COPY_AND_ASSIGN(ResettableSettingsSnapshot);
    116 };
    117 
    118 // The caller of ResettableSettingsSnapshot.
    119 enum SnapshotCaller {
    120   PROFILE_RESET_WEBUI = 0,
    121   PROFILE_RESET_PROMPT,
    122 };
    123 
    124 // Serializes specified |snapshot| members to JSON format. |field_mask| is a bit
    125 // mask of ResettableSettingsSnapshot::Field values.
    126 std::string SerializeSettingsReport(const ResettableSettingsSnapshot& snapshot,
    127                                     int field_mask);
    128 
    129 // Sends |report| as a feedback. |report| is supposed to be result of
    130 // SerializeSettingsReport().
    131 void SendSettingsFeedback(const std::string& report,
    132                           Profile* profile,
    133                           SnapshotCaller caller);
    134 
    135 // Returns list of key/value pairs for all available reported information
    136 // from the |profile| and some additional fields.
    137 scoped_ptr<base::ListValue> GetReadableFeedbackForSnapshot(
    138     Profile* profile,
    139     const ResettableSettingsSnapshot& snapshot);
    140 
    141 #endif  // CHROME_BROWSER_PROFILE_RESETTER_RESETTABLE_SETTINGS_SNAPSHOT_H_
    142