| // Copyright (c) 2011 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. |
| |
| // Defines the Chrome Extensions Cookies API functions for accessing internet |
| // cookies, as specified in chrome/common/extensions/api/extension_api.json. |
| |
| #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_COOKIES_API_H_ |
| #define CHROME_BROWSER_EXTENSIONS_EXTENSION_COOKIES_API_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/singleton.h" |
| #include "base/time.h" |
| #include "chrome/browser/extensions/extension_function.h" |
| #include "chrome/browser/net/chrome_cookie_notification_details.h" |
| #include "content/common/notification_observer.h" |
| #include "content/common/notification_registrar.h" |
| #include "googleurl/src/gurl.h" |
| #include "net/base/cookie_monster.h" |
| |
| class DictionaryValue; |
| |
| namespace net { |
| class URLRequestContextGetter; |
| } |
| |
| // Observes CookieMonster notifications and routes them as events to the |
| // extension system. |
| class ExtensionCookiesEventRouter : public NotificationObserver { |
| public: |
| // Single instance of the event router. |
| static ExtensionCookiesEventRouter* GetInstance(); |
| |
| void Init(); |
| |
| private: |
| friend struct DefaultSingletonTraits<ExtensionCookiesEventRouter>; |
| |
| ExtensionCookiesEventRouter() {} |
| virtual ~ExtensionCookiesEventRouter() {} |
| |
| // NotificationObserver implementation. |
| virtual void Observe(NotificationType type, |
| const NotificationSource& source, |
| const NotificationDetails& details); |
| |
| // Handler for the COOKIE_CHANGED event. The method takes the details of such |
| // an event and constructs a suitable JSON formatted extension event from it. |
| void CookieChanged(Profile* profile, |
| ChromeCookieDetails* details); |
| |
| // This method dispatches events to the extension message service. |
| void DispatchEvent(Profile* context, |
| const char* event_name, |
| const std::string& json_args, |
| GURL& cookie_domain); |
| |
| // Used for tracking registrations to CookieMonster notifications. |
| NotificationRegistrar registrar_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ExtensionCookiesEventRouter); |
| }; |
| |
| // Serves as a base class for all cookies API functions, and defines some |
| // common functionality for parsing cookies API function arguments. |
| // Note that all of the functions in this file derive from |
| // AsyncExtensionFunction, and are not threadsafe, so they should not be |
| // concurrently accessed from multiple threads. They modify |result_| and other |
| // member variables directly. |
| // See chrome/browser/extensions/extension_function.h for more information. |
| class CookiesFunction : public AsyncExtensionFunction { |
| protected: |
| // Looks for a 'url' value in the given details dictionary and constructs a |
| // GURL from it. Returns false and assigns the internal error_ value if the |
| // URL is invalid or isn't found in the dictionary. If check_host_permissions |
| // is true, the URL is also checked against the extension's host permissions, |
| // and if there is no permission for the URL, this function returns false. |
| bool ParseUrl(const DictionaryValue* details, GURL* url, |
| bool check_host_permissions); |
| |
| // Checks the given details dictionary for a 'storeId' value, and retrieves |
| // the cookie store context and the store ID associated with it. If the |
| // 'storeId' value isn't found in the dictionary, the current execution |
| // context's cookie store context is retrieved. Returns false on error and |
| // assigns the internal error_ value if that occurs. |
| // At least one of the output parameters store and store_id should be |
| // non-NULL. |
| bool ParseStoreContext(const DictionaryValue* details, |
| net::URLRequestContextGetter** context, |
| std::string* store_id); |
| }; |
| |
| // Implements the cookies.get() extension function. |
| class GetCookieFunction : public CookiesFunction { |
| public: |
| GetCookieFunction(); |
| virtual ~GetCookieFunction(); |
| virtual bool RunImpl(); |
| DECLARE_EXTENSION_FUNCTION_NAME("cookies.get") |
| |
| private: |
| void GetCookieOnIOThread(); |
| void RespondOnUIThread(); |
| |
| std::string name_; |
| GURL url_; |
| std::string store_id_; |
| scoped_refptr<net::URLRequestContextGetter> store_context_; |
| }; |
| |
| // Implements the cookies.getAll() extension function. |
| class GetAllCookiesFunction : public CookiesFunction { |
| public: |
| GetAllCookiesFunction(); |
| virtual ~GetAllCookiesFunction(); |
| virtual bool RunImpl(); |
| DECLARE_EXTENSION_FUNCTION_NAME("cookies.getAll") |
| |
| private: |
| void GetAllCookiesOnIOThread(); |
| void RespondOnUIThread(); |
| |
| DictionaryValue* details_; |
| GURL url_; |
| std::string store_id_; |
| scoped_refptr<net::URLRequestContextGetter> store_context_; |
| }; |
| |
| // Implements the cookies.set() extension function. |
| class SetCookieFunction : public CookiesFunction { |
| public: |
| SetCookieFunction(); |
| virtual ~SetCookieFunction(); |
| virtual bool RunImpl(); |
| DECLARE_EXTENSION_FUNCTION_NAME("cookies.set") |
| |
| private: |
| void SetCookieOnIOThread(); |
| void RespondOnUIThread(); |
| |
| GURL url_; |
| std::string name_; |
| std::string value_; |
| std::string domain_; |
| std::string path_; |
| bool secure_; |
| bool http_only_; |
| base::Time expiration_time_; |
| bool success_; |
| std::string store_id_; |
| scoped_refptr<net::URLRequestContextGetter> store_context_; |
| }; |
| |
| // Implements the cookies.remove() extension function. |
| class RemoveCookieFunction : public CookiesFunction { |
| public: |
| RemoveCookieFunction(); |
| virtual ~RemoveCookieFunction(); |
| virtual bool RunImpl(); |
| DECLARE_EXTENSION_FUNCTION_NAME("cookies.remove") |
| |
| private: |
| void RemoveCookieOnIOThread(); |
| void RespondOnUIThread(); |
| |
| GURL url_; |
| std::string name_; |
| bool success_; |
| std::string store_id_; |
| scoped_refptr<net::URLRequestContextGetter> store_context_; |
| }; |
| |
| // Implements the cookies.getAllCookieStores() extension function. |
| class GetAllCookieStoresFunction : public CookiesFunction { |
| public: |
| virtual bool RunImpl(); |
| // GetAllCookieStoresFunction is sync. |
| virtual void Run(); |
| DECLARE_EXTENSION_FUNCTION_NAME("cookies.getAllCookieStores") |
| }; |
| |
| #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_COOKIES_API_H_ |