| // Copyright 2013 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_EXTENSIONS_ACTIVITY_LOG_FULLSTREAM_UI_POLICY_H_ | 
 | #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_FULLSTREAM_UI_POLICY_H_ | 
 |  | 
 | #include <stdint.h> | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "chrome/browser/extensions/activity_log/activity_database.h" | 
 | #include "chrome/browser/extensions/activity_log/activity_log_policy.h" | 
 |  | 
 | class GURL; | 
 |  | 
 | namespace extensions { | 
 |  | 
 | // A policy for logging the full stream of actions, including all arguments. | 
 | // It's mostly intended to be used in testing and analysis. | 
 | // | 
 | // NOTE: The FullStreamUIPolicy deliberately keeps almost all information, | 
 | // including some data that could be privacy sensitive (full URLs including | 
 | // incognito URLs, full headers when WebRequest is used, etc.).  It should not | 
 | // be used during normal browsing if users care about privacy. | 
 | class FullStreamUIPolicy : public ActivityLogDatabasePolicy { | 
 |  public: | 
 |   // For more info about these member functions, see the super class. | 
 |   explicit FullStreamUIPolicy(Profile* profile); | 
 |  | 
 |   void ProcessAction(scoped_refptr<Action> action) override; | 
 |  | 
 |   void ReadFilteredData( | 
 |       const std::string& extension_id, | 
 |       const Action::ActionType type, | 
 |       const std::string& api_name, | 
 |       const std::string& page_url, | 
 |       const std::string& arg_url, | 
 |       const int days_ago, | 
 |       base::OnceCallback<void(std::unique_ptr<Action::ActionVector>)> callback) | 
 |       override; | 
 |  | 
 |   void Close() override; | 
 |  | 
 |   // Remove the actions stored for this policy according to the passed IDs. | 
 |   void RemoveActions(const std::vector<int64_t>& action_ids) override; | 
 |  | 
 |   // Clean the URL data stored for this policy. | 
 |   void RemoveURLs(const std::vector<GURL>& restrict_urls) override; | 
 |  | 
 |   // Clean the data related to this extension for this policy. | 
 |   void RemoveExtensionData(const std::string& extension_id) override; | 
 |  | 
 |   // Delete everything in the database. | 
 |   void DeleteDatabase() override; | 
 |  | 
 |   // Database table schema. | 
 |   static const char kTableName[]; | 
 |   static const char* const kTableContentFields[]; | 
 |   static const char* const kTableFieldTypes[]; | 
 |   static const int kTableFieldCount; | 
 |  | 
 |  protected: | 
 |   // Only ever run by OnDatabaseClose() below; see the comments on the | 
 |   // ActivityDatabase class for an overall discussion of how cleanup works. | 
 |   ~FullStreamUIPolicy() override; | 
 |  | 
 |   // The ActivityDatabase::Delegate interface.  These are always called from | 
 |   // the database thread. | 
 |   bool InitDatabase(sql::Connection* db) override; | 
 |   bool FlushDatabase(sql::Connection* db) override; | 
 |   void OnDatabaseFailure() override; | 
 |   void OnDatabaseClose() override; | 
 |  | 
 |   // Strips arguments if needed by policy.  May return the original object (if | 
 |   // unmodified), or a copy (if modifications were made).  The implementation | 
 |   // in FullStreamUIPolicy returns the action unmodified. | 
 |   virtual scoped_refptr<Action> ProcessArguments( | 
 |       scoped_refptr<Action> action) const; | 
 |  | 
 |   // The implementation of RemoveActions; this must only run on the database | 
 |   // thread. | 
 |   void DoRemoveActions(const std::vector<int64_t>& action_ids); | 
 |  | 
 |   // The implementation of RemoveURLs; this must only run on the database | 
 |   // thread. | 
 |   void DoRemoveURLs(const std::vector<GURL>& restrict_urls); | 
 |  | 
 |   // The implementation of RemoveExtensionData; this must only run on the | 
 |   // database thread. | 
 |   void DoRemoveExtensionData(const std::string& extension_id); | 
 |  | 
 |   // The implementation of DeleteDatabase; this must only run on the database | 
 |   // thread. | 
 |   void DoDeleteDatabase(); | 
 |  | 
 |   // Tracks any pending updates to be written to the database, if write | 
 |   // batching is turned on.  Should only be accessed from the database thread. | 
 |   Action::ActionVector queued_actions_; | 
 |  | 
 |  private: | 
 |   // Adds an Action to queued_actions_; this should be invoked only on the | 
 |   // database thread. | 
 |   void QueueAction(scoped_refptr<Action> action); | 
 |  | 
 |   // Internal method to read data from the database; called on the database | 
 |   // thread. | 
 |   std::unique_ptr<Action::ActionVector> DoReadFilteredData( | 
 |       const std::string& extension_id, | 
 |       const Action::ActionType type, | 
 |       const std::string& api_name, | 
 |       const std::string& page_url, | 
 |       const std::string& arg_url, | 
 |       const int days_ago); | 
 | }; | 
 |  | 
 | }  // namespace extensions | 
 |  | 
 | #endif  // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_FULLSTREAM_UI_POLICY_H_ |