Rename desktop_cursor_loader_updater_aurax11.
[chromium-blink-merge.git] / chrome / browser / extensions / activity_log / uma_policy.h
blob71794f2fbb4961bf383e6015e25a7f258f60145d
1 // Copyright 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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_UMA_POLICY_H_
6 #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_UMA_POLICY_H_
8 #include <map>
9 #include <string>
11 #include "chrome/browser/extensions/activity_log/activity_log_policy.h"
13 #include "chrome/browser/ui/browser_list_observer.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
15 #include "url/gurl.h"
17 namespace extensions {
19 // The UmaPolicy keeps track of how many extensions have read from or modified
20 // a given pageload. UmaPolicy records to a histogram when a given tab is
21 // closed. Caveats:
22 // * If multiple tabs are open for the same URL at the same time, UmaPolicy
23 // treats them as if they are the same.
24 // * UmaPolicy does not record statistics for incognito tabs. (For privacy.)
25 // * If the number of tabs open exceeds 50, UmaPolicy stops recording stats
26 // for tabs 51+. (For memory.)
27 // * UmaPolicy only handles top frames; stats are not recorded for iframes.
28 class UmaPolicy : public ActivityLogPolicy,
29 public TabStripModelObserver,
30 public chrome::BrowserListObserver {
31 public:
32 // The possible status bits for a pageload. If you alter this, make sure to
33 // also update GetHistogramName.
34 enum PageStatus {
35 NONE = 0,
36 CONTENT_SCRIPT = 1,
37 READ_DOM,
38 MODIFIED_DOM,
39 DOM_METHOD,
40 DOCUMENT_WRITE,
41 INNER_HTML,
42 CREATED_SCRIPT,
43 CREATED_IFRAME,
44 CREATED_DIV,
45 CREATED_LINK,
46 CREATED_INPUT,
47 CREATED_EMBED,
48 CREATED_OBJECT,
49 MAX_STATUS // Insert new page statuses right before this one.
52 explicit UmaPolicy(Profile* profile);
54 virtual void ProcessAction(scoped_refptr<Action> action) OVERRIDE;
55 virtual void Close() OVERRIDE;
57 // Gets the histogram name associated with each PageStatus.
58 static const char* GetHistogramName(PageStatus status);
60 protected:
61 // Run when Close() is called.
62 virtual ~UmaPolicy();
64 private:
65 // Used as a special key in the ExtensionMap.
66 static const char kNumberOfTabs[];
68 // The max number of tabs we track at a time.
69 static const size_t kMaxTabsTracked;
71 typedef std::map<std::string, int> ExtensionMap;
72 typedef std::map<std::string, ExtensionMap> SiteMap;
74 // BrowserListObserver
75 virtual void OnBrowserAdded(Browser* browser) OVERRIDE;
76 virtual void OnBrowserRemoved(Browser* browser) OVERRIDE;
78 // TabStripModelObserver
79 // Fired when a page loads, either as a new tab or replacing the contents of
80 // an older tab.
81 virtual void TabChangedAt(content::WebContents* contents,
82 int index,
83 TabChangeType change_type) OVERRIDE;
84 // Fired when a tab closes.
85 virtual void TabClosingAt(TabStripModel* tab_strip_model,
86 content::WebContents* contents,
87 int index) OVERRIDE;
89 // Assign a status bitmask based on the action's properties.
90 int MatchActionToStatus(scoped_refptr<Action> action);
92 // When a page is opened, add it to the SiteMap url_status_.
93 void SetupOpenedPage(const std::string& url);
95 // When a page is closing, remove it from the SiteMap url_status_.
96 void CleanupClosedPage(const std::string& url);
98 // When a page is closing, save statistics about the page to histograms.
99 void HistogramOnClose(const std::string& url);
101 // Standardizes the way URLs are treated.
102 static std::string CleanURL(const GURL& gurl);
104 // Used by UmaPolicyTest.ProcessActionTest.
105 SiteMap url_status() { return url_status_; }
107 Profile* profile_;
109 // URL -> extension id -> page status.
110 SiteMap url_status_;
112 // tab index -> URL.
113 std::map<int32, std::string> tab_list_;
115 FRIEND_TEST_ALL_PREFIXES(UmaPolicyTest, CleanURLTest);
116 FRIEND_TEST_ALL_PREFIXES(UmaPolicyTest, MatchActionToStatusTest);
117 FRIEND_TEST_ALL_PREFIXES(UmaPolicyTest, ProcessActionTest);
118 FRIEND_TEST_ALL_PREFIXES(UmaPolicyTest, SiteUrlTest);
121 } // namespace extensions
123 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_UMA_POLICY_H_