// Copyright (c) 2012 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 WEBKIT_COMMON_APPCACHE_APPCACHE_INTERFACES_H_ #define WEBKIT_COMMON_APPCACHE_APPCACHE_INTERFACES_H_ #include <string> #include <vector> #include "base/basictypes.h" #include "base/files/file_path.h" #include "base/time/time.h" #include "url/gurl.h" #include "webkit/common/webkit_storage_common_export.h" namespace net { class URLRequest; } namespace appcache { // Defines constants, types, and abstract classes used in the main // process and in child processes. static const int kNoHostId = 0; static const int64 kNoCacheId = 0; static const int64 kNoResponseId = 0; static const int64 kUnknownCacheId = -1; enum Status { UNCACHED, IDLE, CHECKING, DOWNLOADING, UPDATE_READY, OBSOLETE }; enum EventID { CHECKING_EVENT, ERROR_EVENT, NO_UPDATE_EVENT, DOWNLOADING_EVENT, PROGRESS_EVENT, UPDATE_READY_EVENT, CACHED_EVENT, OBSOLETE_EVENT }; // Temporarily renumber them in wierd way, to help remove LOG_TIP from WebKit enum LogLevel { LOG_DEBUG = 4, LOG_INFO = 1, LOG_WARNING = 2, LOG_ERROR = 3, }; enum NamespaceType { FALLBACK_NAMESPACE, INTERCEPT_NAMESPACE, NETWORK_NAMESPACE }; struct WEBKIT_STORAGE_COMMON_EXPORT AppCacheInfo { AppCacheInfo(); ~AppCacheInfo(); GURL manifest_url; base::Time creation_time; base::Time last_update_time; base::Time last_access_time; int64 cache_id; int64 group_id; Status status; int64 size; bool is_complete; }; typedef std::vector<AppCacheInfo> AppCacheInfoVector; // Type to hold information about a single appcache resource. struct WEBKIT_STORAGE_COMMON_EXPORT AppCacheResourceInfo { AppCacheResourceInfo(); ~AppCacheResourceInfo(); GURL url; int64 size; bool is_master; bool is_manifest; bool is_intercept; bool is_fallback; bool is_foreign; bool is_explicit; int64 response_id; }; typedef std::vector<AppCacheResourceInfo> AppCacheResourceInfoVector; struct WEBKIT_STORAGE_COMMON_EXPORT Namespace { Namespace(); // Type is set to FALLBACK_NAMESPACE by default. Namespace(NamespaceType type, const GURL& url, const GURL& target, bool is_pattern); Namespace(NamespaceType type, const GURL& url, const GURL& target, bool is_pattern, bool is_executable); ~Namespace(); bool IsMatch(const GURL& url) const; NamespaceType type; GURL namespace_url; GURL target_url; bool is_pattern; bool is_executable; }; typedef std::vector<Namespace> NamespaceVector; // Interface used by backend (browser-process) to talk to frontend (renderer). class WEBKIT_STORAGE_COMMON_EXPORT AppCacheFrontend { public: virtual void OnCacheSelected( int host_id, const appcache::AppCacheInfo& info) = 0; virtual void OnStatusChanged(const std::vector<int>& host_ids, Status status) = 0; virtual void OnEventRaised(const std::vector<int>& host_ids, EventID event_id) = 0; virtual void OnProgressEventRaised(const std::vector<int>& host_ids, const GURL& url, int num_total, int num_complete) = 0; virtual void OnErrorEventRaised(const std::vector<int>& host_ids, const std::string& message) = 0; virtual void OnContentBlocked(int host_id, const GURL& manifest_url) = 0; virtual void OnLogMessage(int host_id, LogLevel log_level, const std::string& message) = 0; virtual ~AppCacheFrontend() {} }; // Interface used by frontend (renderer) to talk to backend (browser-process). class WEBKIT_STORAGE_COMMON_EXPORT AppCacheBackend { public: virtual void RegisterHost(int host_id) = 0; virtual void UnregisterHost(int host_id) = 0; virtual void SetSpawningHostId(int host_id, int spawning_host_id) = 0; virtual void SelectCache(int host_id, const GURL& document_url, const int64 cache_document_was_loaded_from, const GURL& manifest_url) = 0; virtual void SelectCacheForWorker( int host_id, int parent_process_id, int parent_host_id) = 0; virtual void SelectCacheForSharedWorker( int host_id, int64 appcache_id) = 0; virtual void MarkAsForeignEntry(int host_id, const GURL& document_url, int64 cache_document_was_loaded_from) = 0; virtual Status GetStatus(int host_id) = 0; virtual bool StartUpdate(int host_id) = 0; virtual bool SwapCache(int host_id) = 0; virtual void GetResourceList( int host_id, std::vector<AppCacheResourceInfo>* resource_infos) = 0; protected: virtual ~AppCacheBackend() {} }; // Useful string constants. // Note: These are also defined elsewhere in the chrome code base in // url_contants.h .cc, however the appcache library doesn't not have // any dependencies on the chrome library, so we can't use them in here. WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpScheme[]; WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpsScheme[]; WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpGETMethod[]; WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpHEADMethod[]; // CommandLine flag to turn this experimental feature on. WEBKIT_STORAGE_COMMON_EXPORT extern const char kEnableExecutableHandlers[]; WEBKIT_STORAGE_COMMON_EXPORT bool IsSchemeSupported(const GURL& url); WEBKIT_STORAGE_COMMON_EXPORT bool IsMethodSupported(const std::string& method); WEBKIT_STORAGE_COMMON_EXPORT bool IsSchemeAndMethodSupported( const net::URLRequest* request); WEBKIT_STORAGE_COMMON_EXPORT extern const base::FilePath::CharType kAppCacheDatabaseName[]; } // namespace #endif // WEBKIT_COMMON_APPCACHE_APPCACHE_INTERFACES_H_