| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_HISTORY_HISTORY_API_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_HISTORY_HISTORY_API_H_ |
| 6 #define CHROME_BROWSER_EXTENSIONS_API_HISTORY_HISTORY_API_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_API_HISTORY_HISTORY_API_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 } | 25 } |
| 26 | 26 |
| 27 namespace extensions { | 27 namespace extensions { |
| 28 | 28 |
| 29 // Observes History service and routes the notifications as events to the | 29 // Observes History service and routes the notifications as events to the |
| 30 // extension system. | 30 // extension system. |
| 31 class HistoryEventRouter : public content::NotificationObserver, | 31 class HistoryEventRouter : public content::NotificationObserver, |
| 32 public history::HistoryServiceObserver { | 32 public history::HistoryServiceObserver { |
| 33 public: | 33 public: |
| 34 HistoryEventRouter(Profile* profile, HistoryService* history_service); | 34 HistoryEventRouter(Profile* profile, HistoryService* history_service); |
| 35 virtual ~HistoryEventRouter(); | 35 ~HistoryEventRouter() override; |
| 36 | 36 |
| 37 private: | 37 private: |
| 38 // content::NotificationObserver::Observe. | 38 // content::NotificationObserver::Observe. |
| 39 virtual void Observe(int type, | 39 void Observe(int type, |
| 40 const content::NotificationSource& source, | 40 const content::NotificationSource& source, |
| 41 const content::NotificationDetails& details) override; | 41 const content::NotificationDetails& details) override; |
| 42 | 42 |
| 43 // history::HistoryServiceObserver. | 43 // history::HistoryServiceObserver. |
| 44 virtual void OnURLVisited(HistoryService* history_service, | 44 void OnURLVisited(HistoryService* history_service, |
| 45 ui::PageTransition transition, | 45 ui::PageTransition transition, |
| 46 const history::URLRow& row, | 46 const history::URLRow& row, |
| 47 const history::RedirectList& redirects, | 47 const history::RedirectList& redirects, |
| 48 base::Time visit_time) override; | 48 base::Time visit_time) override; |
| 49 | 49 |
| 50 void HistoryUrlsRemoved(Profile* profile, | 50 void HistoryUrlsRemoved(Profile* profile, |
| 51 const history::URLsDeletedDetails* details); | 51 const history::URLsDeletedDetails* details); |
| 52 | 52 |
| 53 void DispatchEvent(Profile* profile, | 53 void DispatchEvent(Profile* profile, |
| 54 const std::string& event_name, | 54 const std::string& event_name, |
| 55 scoped_ptr<base::ListValue> event_args); | 55 scoped_ptr<base::ListValue> event_args); |
| 56 | 56 |
| 57 // Used for tracking registrations to history service notifications. | 57 // Used for tracking registrations to history service notifications. |
| 58 content::NotificationRegistrar registrar_; | 58 content::NotificationRegistrar registrar_; |
| 59 Profile* profile_; | 59 Profile* profile_; |
| 60 ScopedObserver<HistoryService, HistoryServiceObserver> | 60 ScopedObserver<HistoryService, HistoryServiceObserver> |
| 61 history_service_observer_; | 61 history_service_observer_; |
| 62 | 62 |
| 63 DISALLOW_COPY_AND_ASSIGN(HistoryEventRouter); | 63 DISALLOW_COPY_AND_ASSIGN(HistoryEventRouter); |
| 64 }; | 64 }; |
| 65 | 65 |
| 66 class HistoryAPI : public BrowserContextKeyedAPI, public EventRouter::Observer { | 66 class HistoryAPI : public BrowserContextKeyedAPI, public EventRouter::Observer { |
| 67 public: | 67 public: |
| 68 explicit HistoryAPI(content::BrowserContext* context); | 68 explicit HistoryAPI(content::BrowserContext* context); |
| 69 virtual ~HistoryAPI(); | 69 ~HistoryAPI() override; |
| 70 | 70 |
| 71 // KeyedService implementation. | 71 // KeyedService implementation. |
| 72 virtual void Shutdown() override; | 72 void Shutdown() override; |
| 73 | 73 |
| 74 // BrowserContextKeyedAPI implementation. | 74 // BrowserContextKeyedAPI implementation. |
| 75 static BrowserContextKeyedAPIFactory<HistoryAPI>* GetFactoryInstance(); | 75 static BrowserContextKeyedAPIFactory<HistoryAPI>* GetFactoryInstance(); |
| 76 | 76 |
| 77 // EventRouter::Observer implementation. | 77 // EventRouter::Observer implementation. |
| 78 virtual void OnListenerAdded(const EventListenerInfo& details) override; | 78 void OnListenerAdded(const EventListenerInfo& details) override; |
| 79 | 79 |
| 80 private: | 80 private: |
| 81 friend class BrowserContextKeyedAPIFactory<HistoryAPI>; | 81 friend class BrowserContextKeyedAPIFactory<HistoryAPI>; |
| 82 | 82 |
| 83 content::BrowserContext* browser_context_; | 83 content::BrowserContext* browser_context_; |
| 84 | 84 |
| 85 // BrowserContextKeyedAPI implementation. | 85 // BrowserContextKeyedAPI implementation. |
| 86 static const char* service_name() { | 86 static const char* service_name() { |
| 87 return "HistoryAPI"; | 87 return "HistoryAPI"; |
| 88 } | 88 } |
| 89 static const bool kServiceIsNULLWhileTesting = true; | 89 static const bool kServiceIsNULLWhileTesting = true; |
| 90 | 90 |
| 91 // Created lazily upon OnListenerAdded. | 91 // Created lazily upon OnListenerAdded. |
| 92 scoped_ptr<HistoryEventRouter> history_event_router_; | 92 scoped_ptr<HistoryEventRouter> history_event_router_; |
| 93 }; | 93 }; |
| 94 | 94 |
| 95 template <> | 95 template <> |
| 96 void BrowserContextKeyedAPIFactory<HistoryAPI>::DeclareFactoryDependencies(); | 96 void BrowserContextKeyedAPIFactory<HistoryAPI>::DeclareFactoryDependencies(); |
| 97 | 97 |
| 98 // Base class for history function APIs. | 98 // Base class for history function APIs. |
| 99 class HistoryFunction : public ChromeAsyncExtensionFunction { | 99 class HistoryFunction : public ChromeAsyncExtensionFunction { |
| 100 protected: | 100 protected: |
| 101 virtual ~HistoryFunction() {} | 101 ~HistoryFunction() override {} |
| 102 | 102 |
| 103 bool ValidateUrl(const std::string& url_string, GURL* url); | 103 bool ValidateUrl(const std::string& url_string, GURL* url); |
| 104 bool VerifyDeleteAllowed(); | 104 bool VerifyDeleteAllowed(); |
| 105 base::Time GetTime(double ms_from_epoch); | 105 base::Time GetTime(double ms_from_epoch); |
| 106 }; | 106 }; |
| 107 | 107 |
| 108 // Base class for history funciton APIs which require async interaction with | 108 // Base class for history funciton APIs which require async interaction with |
| 109 // chrome services and the extension thread. | 109 // chrome services and the extension thread. |
| 110 class HistoryFunctionWithCallback : public HistoryFunction { | 110 class HistoryFunctionWithCallback : public HistoryFunction { |
| 111 public: | 111 public: |
| 112 HistoryFunctionWithCallback(); | 112 HistoryFunctionWithCallback(); |
| 113 | 113 |
| 114 protected: | 114 protected: |
| 115 virtual ~HistoryFunctionWithCallback(); | 115 ~HistoryFunctionWithCallback() override; |
| 116 | 116 |
| 117 // ExtensionFunction: | 117 // ExtensionFunction: |
| 118 virtual bool RunAsync() override; | 118 bool RunAsync() override; |
| 119 | 119 |
| 120 // Return true if the async call was completed, false otherwise. | 120 // Return true if the async call was completed, false otherwise. |
| 121 virtual bool RunAsyncImpl() = 0; | 121 virtual bool RunAsyncImpl() = 0; |
| 122 | 122 |
| 123 // Call this method to report the results of the async method to the caller. | 123 // Call this method to report the results of the async method to the caller. |
| 124 // This method calls Release(). | 124 // This method calls Release(). |
| 125 virtual void SendAsyncResponse(); | 125 virtual void SendAsyncResponse(); |
| 126 | 126 |
| 127 // The task tracker for the HistoryService callbacks. | 127 // The task tracker for the HistoryService callbacks. |
| 128 base::CancelableTaskTracker task_tracker_; | 128 base::CancelableTaskTracker task_tracker_; |
| 129 | 129 |
| 130 private: | 130 private: |
| 131 // The actual call to SendResponse. This is required since the semantics for | 131 // The actual call to SendResponse. This is required since the semantics for |
| 132 // CancelableRequestConsumerT require it to be accessed after the call. | 132 // CancelableRequestConsumerT require it to be accessed after the call. |
| 133 void SendResponseToCallback(); | 133 void SendResponseToCallback(); |
| 134 }; | 134 }; |
| 135 | 135 |
| 136 class HistoryGetVisitsFunction : public HistoryFunctionWithCallback { | 136 class HistoryGetVisitsFunction : public HistoryFunctionWithCallback { |
| 137 public: | 137 public: |
| 138 DECLARE_EXTENSION_FUNCTION("history.getVisits", HISTORY_GETVISITS) | 138 DECLARE_EXTENSION_FUNCTION("history.getVisits", HISTORY_GETVISITS) |
| 139 | 139 |
| 140 protected: | 140 protected: |
| 141 virtual ~HistoryGetVisitsFunction() {} | 141 ~HistoryGetVisitsFunction() override {} |
| 142 | 142 |
| 143 // HistoryFunctionWithCallback: | 143 // HistoryFunctionWithCallback: |
| 144 virtual bool RunAsyncImpl() override; | 144 bool RunAsyncImpl() override; |
| 145 | 145 |
| 146 // Callback for the history function to provide results. | 146 // Callback for the history function to provide results. |
| 147 void QueryComplete(bool success, | 147 void QueryComplete(bool success, |
| 148 const history::URLRow& url_row, | 148 const history::URLRow& url_row, |
| 149 const history::VisitVector& visits); | 149 const history::VisitVector& visits); |
| 150 }; | 150 }; |
| 151 | 151 |
| 152 class HistorySearchFunction : public HistoryFunctionWithCallback { | 152 class HistorySearchFunction : public HistoryFunctionWithCallback { |
| 153 public: | 153 public: |
| 154 DECLARE_EXTENSION_FUNCTION("history.search", HISTORY_SEARCH) | 154 DECLARE_EXTENSION_FUNCTION("history.search", HISTORY_SEARCH) |
| 155 | 155 |
| 156 protected: | 156 protected: |
| 157 virtual ~HistorySearchFunction() {} | 157 ~HistorySearchFunction() override {} |
| 158 | 158 |
| 159 // HistoryFunctionWithCallback: | 159 // HistoryFunctionWithCallback: |
| 160 virtual bool RunAsyncImpl() override; | 160 bool RunAsyncImpl() override; |
| 161 | 161 |
| 162 // Callback for the history function to provide results. | 162 // Callback for the history function to provide results. |
| 163 void SearchComplete(history::QueryResults* results); | 163 void SearchComplete(history::QueryResults* results); |
| 164 }; | 164 }; |
| 165 | 165 |
| 166 class HistoryAddUrlFunction : public HistoryFunction { | 166 class HistoryAddUrlFunction : public HistoryFunction { |
| 167 public: | 167 public: |
| 168 DECLARE_EXTENSION_FUNCTION("history.addUrl", HISTORY_ADDURL) | 168 DECLARE_EXTENSION_FUNCTION("history.addUrl", HISTORY_ADDURL) |
| 169 | 169 |
| 170 protected: | 170 protected: |
| 171 virtual ~HistoryAddUrlFunction() {} | 171 ~HistoryAddUrlFunction() override {} |
| 172 | 172 |
| 173 // HistoryFunctionWithCallback: | 173 // HistoryFunctionWithCallback: |
| 174 virtual bool RunAsync() override; | 174 bool RunAsync() override; |
| 175 }; | 175 }; |
| 176 | 176 |
| 177 class HistoryDeleteAllFunction : public HistoryFunctionWithCallback { | 177 class HistoryDeleteAllFunction : public HistoryFunctionWithCallback { |
| 178 public: | 178 public: |
| 179 DECLARE_EXTENSION_FUNCTION("history.deleteAll", HISTORY_DELETEALL) | 179 DECLARE_EXTENSION_FUNCTION("history.deleteAll", HISTORY_DELETEALL) |
| 180 | 180 |
| 181 protected: | 181 protected: |
| 182 virtual ~HistoryDeleteAllFunction() {} | 182 ~HistoryDeleteAllFunction() override {} |
| 183 | 183 |
| 184 // HistoryFunctionWithCallback: | 184 // HistoryFunctionWithCallback: |
| 185 virtual bool RunAsyncImpl() override; | 185 bool RunAsyncImpl() override; |
| 186 | 186 |
| 187 // Callback for the history service to acknowledge deletion. | 187 // Callback for the history service to acknowledge deletion. |
| 188 void DeleteComplete(); | 188 void DeleteComplete(); |
| 189 }; | 189 }; |
| 190 | 190 |
| 191 | 191 |
| 192 class HistoryDeleteUrlFunction : public HistoryFunction { | 192 class HistoryDeleteUrlFunction : public HistoryFunction { |
| 193 public: | 193 public: |
| 194 DECLARE_EXTENSION_FUNCTION("history.deleteUrl", HISTORY_DELETEURL) | 194 DECLARE_EXTENSION_FUNCTION("history.deleteUrl", HISTORY_DELETEURL) |
| 195 | 195 |
| 196 protected: | 196 protected: |
| 197 virtual ~HistoryDeleteUrlFunction() {} | 197 ~HistoryDeleteUrlFunction() override {} |
| 198 | 198 |
| 199 // HistoryFunctionWithCallback: | 199 // HistoryFunctionWithCallback: |
| 200 virtual bool RunAsync() override; | 200 bool RunAsync() override; |
| 201 }; | 201 }; |
| 202 | 202 |
| 203 class HistoryDeleteRangeFunction : public HistoryFunctionWithCallback { | 203 class HistoryDeleteRangeFunction : public HistoryFunctionWithCallback { |
| 204 public: | 204 public: |
| 205 DECLARE_EXTENSION_FUNCTION("history.deleteRange", HISTORY_DELETERANGE) | 205 DECLARE_EXTENSION_FUNCTION("history.deleteRange", HISTORY_DELETERANGE) |
| 206 | 206 |
| 207 protected: | 207 protected: |
| 208 virtual ~HistoryDeleteRangeFunction() {} | 208 ~HistoryDeleteRangeFunction() override {} |
| 209 | 209 |
| 210 // HistoryFunctionWithCallback: | 210 // HistoryFunctionWithCallback: |
| 211 virtual bool RunAsyncImpl() override; | 211 bool RunAsyncImpl() override; |
| 212 | 212 |
| 213 // Callback for the history service to acknowledge deletion. | 213 // Callback for the history service to acknowledge deletion. |
| 214 void DeleteComplete(); | 214 void DeleteComplete(); |
| 215 }; | 215 }; |
| 216 | 216 |
| 217 } // namespace extensions | 217 } // namespace extensions |
| 218 | 218 |
| 219 #endif // CHROME_BROWSER_EXTENSIONS_API_HISTORY_HISTORY_API_H_ | 219 #endif // CHROME_BROWSER_EXTENSIONS_API_HISTORY_HISTORY_API_H_ |
| OLD | NEW |