Index: chrome/browser/extensions/extension_history_api.h |
=================================================================== |
--- chrome/browser/extensions/extension_history_api.h (revision 0) |
+++ chrome/browser/extensions/extension_history_api.h (revision 0) |
@@ -0,0 +1,149 @@ |
+// Copyright (c) 2009 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_EXTENSION_HISTORY_API_H_ |
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_HISTORY_API_H_ |
+ |
+#include <map> |
+#include <string> |
+ |
+#include "base/singleton.h" |
+#include "chrome/browser/history/history.h" |
+#include "chrome/browser/history/history_notifications.h" |
+#include "chrome/browser/extensions/extension_function.h" |
+#include "chrome/common/notification_registrar.h" |
+ |
+// Observes History service and routes the notifications as events to the |
+// extension system. |
+class ExtensionHistoryEventRouter : public NotificationObserver { |
+ public: |
+ // Single instance of the event router. |
+ static ExtensionHistoryEventRouter* GetInstance(); |
+ |
+ // Safe to call multiple times. |
+ void ObserveProfile(Profile* profile); |
+ |
+ private: |
+ friend struct DefaultSingletonTraits<ExtensionHistoryEventRouter>; |
+ |
+ ExtensionHistoryEventRouter() {} |
+ virtual ~ExtensionHistoryEventRouter() {} |
+ |
+ // NotificationObserver::Observe. |
+ virtual void Observe(NotificationType type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details); |
+ |
+ void HistoryUrlVisited(Profile* profile, |
+ const history::URLVisitedDetails* details); |
+ |
+ void HistoryUrlsRemoved(Profile* profile, |
+ const history::URLsDeletedDetails* details); |
+ |
+ void DispatchEvent(Profile* profile, |
+ const char* event_name, |
+ const std::string& json_args); |
+ |
+ // Used for tracking registrations to history service notifications. |
+ NotificationRegistrar registrar_; |
+ |
+ // Registered profiles. |
+ typedef std::map<uintptr_t, Profile*> ProfileMap; |
+ ProfileMap profiles_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ExtensionHistoryEventRouter); |
+}; |
+ |
+ |
+// Base class for history function APIs. |
+class HistoryFunction : public AsyncExtensionFunction { |
+ public: |
+ virtual void Run(); |
+ virtual bool RunImpl() = 0; |
+ |
+ bool GetUrlFromValue(Value* value, GURL* url); |
+ bool GetTimeFromValue(Value* value, base::Time* time); |
+}; |
+ |
+// Base class for history funciton APIs which require async interaction with |
+// chrome services and the extension thread. |
+class HistoryFunctionWithCallback : public HistoryFunction { |
+ public: |
+ // Return true if the async call was completed, false otherwise. |
+ virtual bool RunAsyncImpl() = 0; |
+ |
+ // Call this method to report the results of the async method to the caller. |
+ // This method calls Release(). |
+ virtual void SendAsyncResponse(); |
+ |
+ // Override HistoryFunction::RunImpl. |
+ virtual bool RunImpl(); |
+ |
+ protected: |
+ // The consumer for the HistoryService callbacks. |
+ CancelableRequestConsumer cancelable_consumer_; |
+ |
+ private: |
+ // The actual call to SendReposne. This is required since the semantics for |
+ // CancelableRequestConsumerT require it to be accessed after the call. |
+ void SendResponseToCallback(); |
+ |
+ friend class NewRunnableMethod; |
+}; |
+ |
+class GetVisitsHistoryFunction : public HistoryFunctionWithCallback { |
+ public: |
+ // Override HistoryFunction. |
+ virtual bool RunAsyncImpl(); |
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.history.getVisits"); |
+ |
+ // Callback for the history function to provide results. |
+ void QueryComplete(HistoryService::Handle request_service, |
+ bool success, |
+ const history::URLRow* url_row, |
+ history::VisitVector* visits); |
+}; |
+ |
+class SearchHistoryFunction : public HistoryFunctionWithCallback { |
+ public: |
+ virtual bool RunAsyncImpl(); |
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.history.search"); |
+ |
+ // Callback for the history function to provide results. |
+ void SearchComplete(HistoryService::Handle request_handle, |
+ history::QueryResults* results); |
+}; |
+ |
+class AddUrlHistoryFunction : public HistoryFunction { |
+ public: |
+ virtual bool RunImpl(); |
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.history.addUrl"); |
+}; |
+ |
+class DeleteAllHistoryFunction : public HistoryFunctionWithCallback { |
+ public: |
+ virtual bool RunAsyncImpl(); |
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.history.deleteAll"); |
+ |
+ // Callback for the history service to acknowledge deletion. |
+ void DeleteComplete(); |
+}; |
+ |
+ |
+class DeleteUrlHistoryFunction : public HistoryFunction { |
+ public: |
+ virtual bool RunImpl(); |
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.history.deleteUrl"); |
+}; |
+ |
+class DeleteRangeHistoryFunction : public HistoryFunctionWithCallback { |
+ public: |
+ virtual bool RunAsyncImpl(); |
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.history.deleteRange"); |
+ |
+ // Callback for the history service to acknowledge deletion. |
+ void DeleteComplete(); |
+}; |
+ |
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_HISTORY_API_H_ |
Property changes on: chrome\browser\extensions\extension_history_api.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |