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_FULLSTREAM_UI_POLICY_H_
6 #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_FULLSTREAM_UI_POLICY_H_
10 #include "chrome/browser/extensions/activity_log/activity_database.h"
11 #include "chrome/browser/extensions/activity_log/activity_log_policy.h"
15 namespace extensions {
17 // A policy for logging the full stream of actions, including all arguments.
18 // It's mostly intended to be used in testing and analysis.
20 // NOTE: The FullStreamUIPolicy deliberately keeps almost all information,
21 // including some data that could be privacy sensitive (full URLs including
22 // incognito URLs, full headers when WebRequest is used, etc.). It should not
23 // be used during normal browsing if users care about privacy.
24 class FullStreamUIPolicy : public ActivityLogDatabasePolicy {
26 // For more info about these member functions, see the super class.
27 explicit FullStreamUIPolicy(Profile* profile);
29 virtual void ProcessAction(scoped_refptr<Action> action) OVERRIDE;
31 virtual void ReadFilteredData(
32 const std::string& extension_id,
33 const Action::ActionType type,
34 const std::string& api_name,
35 const std::string& page_url,
36 const std::string& arg_url,
39 <void(scoped_ptr<Action::ActionVector>)>& callback) OVERRIDE;
41 virtual void Close() OVERRIDE;
43 // Remove the actions stored for this policy according to the passed IDs.
44 virtual void RemoveActions(const std::vector<int64>& action_ids) OVERRIDE;
46 // Clean the URL data stored for this policy.
47 virtual void RemoveURLs(const std::vector<GURL>& restrict_urls) OVERRIDE;
49 // Clean the data related to this extension for this policy.
50 virtual void RemoveExtensionData(const std::string& extension_id) OVERRIDE;
52 // Delete everything in the database.
53 virtual void DeleteDatabase() OVERRIDE;
55 // Database table schema.
56 static const char* kTableName;
57 static const char* kTableContentFields[];
58 static const char* kTableFieldTypes[];
59 static const int kTableFieldCount;
62 // Only ever run by OnDatabaseClose() below; see the comments on the
63 // ActivityDatabase class for an overall discussion of how cleanup works.
64 virtual ~FullStreamUIPolicy();
66 // The ActivityDatabase::Delegate interface. These are always called from
67 // the database thread.
68 virtual bool InitDatabase(sql::Connection* db) OVERRIDE;
69 virtual bool FlushDatabase(sql::Connection* db) OVERRIDE;
70 virtual void OnDatabaseFailure() OVERRIDE;
71 virtual void OnDatabaseClose() OVERRIDE;
73 // Strips arguments if needed by policy. May return the original object (if
74 // unmodified), or a copy (if modifications were made). The implementation
75 // in FullStreamUIPolicy returns the action unmodified.
76 virtual scoped_refptr<Action> ProcessArguments(
77 scoped_refptr<Action> action) const;
79 // The implementation of RemoveActions; this must only run on the database
81 void DoRemoveActions(const std::vector<int64>& action_ids);
83 // The implementation of RemoveURLs; this must only run on the database
85 void DoRemoveURLs(const std::vector<GURL>& restrict_urls);
87 // The implementation of RemoveExtensionData; this must only run on the
89 void DoRemoveExtensionData(const std::string& extension_id);
91 // The implementation of DeleteDatabase; this must only run on the database
93 void DoDeleteDatabase();
95 // Tracks any pending updates to be written to the database, if write
96 // batching is turned on. Should only be accessed from the database thread.
97 Action::ActionVector queued_actions_;
100 // Adds an Action to queued_actions_; this should be invoked only on the
102 void QueueAction(scoped_refptr<Action> action);
104 // Internal method to read data from the database; called on the database
106 scoped_ptr<Action::ActionVector> DoReadFilteredData(
107 const std::string& extension_id,
108 const Action::ActionType type,
109 const std::string& api_name,
110 const std::string& page_url,
111 const std::string& arg_url,
115 } // namespace extensions
117 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_FULLSTREAM_UI_POLICY_H_