Index: webkit/tools/test_shell/simple_appcache_system.cc |
diff --git a/webkit/tools/test_shell/simple_appcache_system.cc b/webkit/tools/test_shell/simple_appcache_system.cc |
deleted file mode 100644 |
index 7c6e0ed714f3517f4054048be1089de060da6d82..0000000000000000000000000000000000000000 |
--- a/webkit/tools/test_shell/simple_appcache_system.cc |
+++ /dev/null |
@@ -1,465 +0,0 @@ |
-// 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. |
- |
-#include "webkit/tools/test_shell/simple_appcache_system.h" |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/callback.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "webkit/appcache/appcache_interceptor.h" |
-#include "webkit/appcache/web_application_cache_host_impl.h" |
-#include "webkit/tools/test_shell/simple_resource_loader_bridge.h" |
- |
-using WebKit::WebApplicationCacheHost; |
-using WebKit::WebApplicationCacheHostClient; |
-using appcache::WebApplicationCacheHostImpl; |
-using appcache::AppCacheBackendImpl; |
-using appcache::AppCacheInterceptor; |
- |
-// SimpleFrontendProxy -------------------------------------------------------- |
-// Proxies method calls from the backend IO thread to the frontend UI thread. |
- |
-class SimpleFrontendProxy |
- : public base::RefCountedThreadSafe<SimpleFrontendProxy>, |
- public appcache::AppCacheFrontend { |
- public: |
- explicit SimpleFrontendProxy(SimpleAppCacheSystem* appcache_system) |
- : system_(appcache_system) { |
- } |
- |
- void clear_appcache_system() { system_ = NULL; } |
- |
- virtual void OnCacheSelected(int host_id, |
- const appcache::AppCacheInfo& info) OVERRIDE { |
- if (!system_) |
- return; |
- if (system_->is_io_thread()) { |
- system_->ui_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleFrontendProxy::OnCacheSelected, this, host_id, |
- info)); |
- } else if (system_->is_ui_thread()) { |
- system_->frontend_impl_.OnCacheSelected(host_id, info); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- virtual void OnStatusChanged(const std::vector<int>& host_ids, |
- appcache::Status status) OVERRIDE { |
- if (!system_) |
- return; |
- if (system_->is_io_thread()) |
- system_->ui_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleFrontendProxy::OnStatusChanged, this, host_ids, |
- status)); |
- else if (system_->is_ui_thread()) |
- system_->frontend_impl_.OnStatusChanged(host_ids, status); |
- else |
- NOTREACHED(); |
- } |
- |
- virtual void OnEventRaised(const std::vector<int>& host_ids, |
- appcache::EventID event_id) OVERRIDE { |
- if (!system_) |
- return; |
- if (system_->is_io_thread()) |
- system_->ui_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleFrontendProxy::OnEventRaised, this, host_ids, |
- event_id)); |
- else if (system_->is_ui_thread()) |
- system_->frontend_impl_.OnEventRaised(host_ids, event_id); |
- else |
- NOTREACHED(); |
- } |
- |
- virtual void OnProgressEventRaised(const std::vector<int>& host_ids, |
- const GURL& url, |
- int num_total, int num_complete) OVERRIDE { |
- if (!system_) |
- return; |
- if (system_->is_io_thread()) |
- system_->ui_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleFrontendProxy::OnProgressEventRaised, this, |
- host_ids, url, num_total, num_complete)); |
- else if (system_->is_ui_thread()) |
- system_->frontend_impl_.OnProgressEventRaised( |
- host_ids, url, num_total, num_complete); |
- else |
- NOTREACHED(); |
- } |
- |
- virtual void OnErrorEventRaised(const std::vector<int>& host_ids, |
- const std::string& message) OVERRIDE { |
- if (!system_) |
- return; |
- if (system_->is_io_thread()) |
- system_->ui_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleFrontendProxy::OnErrorEventRaised, this, host_ids, |
- message)); |
- else if (system_->is_ui_thread()) |
- system_->frontend_impl_.OnErrorEventRaised( |
- host_ids, message); |
- else |
- NOTREACHED(); |
- } |
- |
- virtual void OnLogMessage(int host_id, |
- appcache::LogLevel log_level, |
- const std::string& message) OVERRIDE { |
- if (!system_) |
- return; |
- if (system_->is_io_thread()) |
- system_->ui_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleFrontendProxy::OnLogMessage, this, host_id, |
- log_level, message)); |
- else if (system_->is_ui_thread()) |
- system_->frontend_impl_.OnLogMessage( |
- host_id, log_level, message); |
- else |
- NOTREACHED(); |
- } |
- |
- virtual void OnContentBlocked(int host_id, |
- const GURL& manifest_url) OVERRIDE {} |
- |
- private: |
- friend class base::RefCountedThreadSafe<SimpleFrontendProxy>; |
- |
- virtual ~SimpleFrontendProxy() {} |
- |
- SimpleAppCacheSystem* system_; |
-}; |
- |
- |
-// SimpleBackendProxy -------------------------------------------------------- |
-// Proxies method calls from the frontend UI thread to the backend IO thread. |
- |
-class SimpleBackendProxy |
- : public base::RefCountedThreadSafe<SimpleBackendProxy>, |
- public appcache::AppCacheBackend { |
- public: |
- explicit SimpleBackendProxy(SimpleAppCacheSystem* appcache_system) |
- : system_(appcache_system), event_(true, false) { |
- get_status_callback_ = |
- base::Bind(&SimpleBackendProxy::GetStatusCallback, |
- base::Unretained(this)); |
- start_update_callback_ = |
- base::Bind(&SimpleBackendProxy::StartUpdateCallback, |
- base::Unretained(this)); |
- swap_cache_callback_= |
- base::Bind(&SimpleBackendProxy::SwapCacheCallback, |
- base::Unretained(this)); |
- } |
- |
- virtual void RegisterHost(int host_id) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleBackendProxy::RegisterHost, this, host_id)); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->RegisterHost(host_id); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- virtual void UnregisterHost(int host_id) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleBackendProxy::UnregisterHost, this, host_id)); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->UnregisterHost(host_id); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- virtual void SetSpawningHostId(int host_id, int spawning_host_id) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleBackendProxy::SetSpawningHostId, this, host_id, |
- spawning_host_id)); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->SetSpawningHostId(host_id, spawning_host_id); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- virtual void SelectCache(int host_id, |
- const GURL& document_url, |
- const int64 cache_document_was_loaded_from, |
- const GURL& manifest_url) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleBackendProxy::SelectCache, this, host_id, |
- document_url, cache_document_was_loaded_from, |
- manifest_url)); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->SelectCache(host_id, document_url, |
- cache_document_was_loaded_from, |
- manifest_url); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- virtual void GetResourceList( |
- int host_id, |
- std::vector<appcache::AppCacheResourceInfo>* resource_infos) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleBackendProxy::GetResourceList, this, host_id, |
- resource_infos)); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->GetResourceList(host_id, resource_infos); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- virtual void SelectCacheForWorker( |
- int host_id, |
- int parent_process_id, |
- int parent_host_id) OVERRIDE { |
- NOTIMPLEMENTED(); // Workers are not supported in test_shell. |
- } |
- |
- virtual void SelectCacheForSharedWorker( |
- int host_id, |
- int64 appcache_id) OVERRIDE { |
- NOTIMPLEMENTED(); // Workers are not supported in test_shell. |
- } |
- |
- virtual void MarkAsForeignEntry( |
- int host_id, |
- const GURL& document_url, |
- int64 cache_document_was_loaded_from) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(&SimpleBackendProxy::MarkAsForeignEntry, this, host_id, |
- document_url, cache_document_was_loaded_from)); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->MarkAsForeignEntry( |
- host_id, document_url, |
- cache_document_was_loaded_from); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- virtual appcache::Status GetStatus(int host_id) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- status_result_ = appcache::UNCACHED; |
- event_.Reset(); |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(base::IgnoreResult(&SimpleBackendProxy::GetStatus), |
- this, host_id)); |
- event_.Wait(); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->GetStatusWithCallback( |
- host_id, get_status_callback_, NULL); |
- } else { |
- NOTREACHED(); |
- } |
- return status_result_; |
- } |
- |
- virtual bool StartUpdate(int host_id) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- bool_result_ = false; |
- event_.Reset(); |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(base::IgnoreResult(&SimpleBackendProxy::StartUpdate), |
- this, host_id)); |
- event_.Wait(); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->StartUpdateWithCallback( |
- host_id, start_update_callback_, NULL); |
- } else { |
- NOTREACHED(); |
- } |
- return bool_result_; |
- } |
- |
- virtual bool SwapCache(int host_id) OVERRIDE { |
- if (system_->is_ui_thread()) { |
- bool_result_ = false; |
- event_.Reset(); |
- system_->io_message_loop()->PostTask( |
- FROM_HERE, |
- base::Bind(base::IgnoreResult(&SimpleBackendProxy::SwapCache), |
- this, host_id)); |
- event_.Wait(); |
- } else if (system_->is_io_thread()) { |
- system_->backend_impl_->SwapCacheWithCallback( |
- host_id, swap_cache_callback_, NULL); |
- } else { |
- NOTREACHED(); |
- } |
- return bool_result_; |
- } |
- |
- void GetStatusCallback(appcache::Status status, void* param) { |
- status_result_ = status; |
- event_.Signal(); |
- } |
- |
- void StartUpdateCallback(bool result, void* param) { |
- bool_result_ = result; |
- event_.Signal(); |
- } |
- |
- void SwapCacheCallback(bool result, void* param) { |
- bool_result_ = result; |
- event_.Signal(); |
- } |
- |
- void SignalEvent() { |
- event_.Signal(); |
- } |
- |
- private: |
- friend class base::RefCountedThreadSafe<SimpleBackendProxy>; |
- |
- virtual ~SimpleBackendProxy() {} |
- |
- SimpleAppCacheSystem* system_; |
- base::WaitableEvent event_; |
- bool bool_result_; |
- appcache::Status status_result_; |
- appcache::GetStatusCallback get_status_callback_; |
- appcache::StartUpdateCallback start_update_callback_; |
- appcache::SwapCacheCallback swap_cache_callback_; |
-}; |
- |
- |
-// SimpleAppCacheSystem -------------------------------------------------------- |
- |
-// This class only works for a single process browser. |
-static const int kSingleProcessId = 1; |
- |
-// A not so thread safe singleton, but should work for test_shell. |
-SimpleAppCacheSystem* SimpleAppCacheSystem::instance_ = NULL; |
- |
-SimpleAppCacheSystem::SimpleAppCacheSystem() |
- : io_message_loop_(NULL), ui_message_loop_(NULL), |
- backend_proxy_(new SimpleBackendProxy(this)), |
- frontend_proxy_(new SimpleFrontendProxy(this)), |
- backend_impl_(NULL), service_(NULL), db_thread_("AppCacheDBThread") { |
- DCHECK(!instance_); |
- instance_ = this; |
-} |
- |
-static void SignalEvent(base::WaitableEvent* event) { |
- event->Signal(); |
-} |
- |
-SimpleAppCacheSystem::~SimpleAppCacheSystem() { |
- DCHECK(!io_message_loop_ && !backend_impl_ && !service_); |
- frontend_proxy_->clear_appcache_system(); // in case a task is in transit |
- instance_ = NULL; |
- |
- if (db_thread_.IsRunning()) { |
- // We pump a task thru the db thread to ensure any tasks previously |
- // scheduled on that thread have been performed prior to return. |
- base::WaitableEvent event(false, false); |
- db_thread_.message_loop()->PostTask( |
- FROM_HERE, base::Bind(&SignalEvent, &event)); |
- event.Wait(); |
- } |
-} |
- |
-void SimpleAppCacheSystem::InitOnUIThread( |
- const base::FilePath& cache_directory) { |
- DCHECK(!ui_message_loop_); |
- ui_message_loop_ = base::MessageLoop::current(); |
- cache_directory_ = cache_directory; |
-} |
- |
-void SimpleAppCacheSystem::InitOnIOThread( |
- net::URLRequestContext* request_context) { |
- if (!is_initailized_on_ui_thread()) |
- return; |
- |
- DCHECK(!io_message_loop_); |
- io_message_loop_ = base::MessageLoop::current(); |
- |
- if (!db_thread_.IsRunning()) |
- db_thread_.Start(); |
- |
- // Recreate and initialize per each IO thread. |
- service_ = new appcache::AppCacheService(NULL); |
- backend_impl_ = new appcache::AppCacheBackendImpl(); |
- service_->Initialize(cache_directory_, |
- db_thread_.message_loop_proxy(), |
- SimpleResourceLoaderBridge::GetCacheThread()); |
- service_->set_request_context(request_context); |
- backend_impl_->Initialize(service_, frontend_proxy_.get(), kSingleProcessId); |
- |
- AppCacheInterceptor::EnsureRegistered(); |
-} |
- |
-void SimpleAppCacheSystem::CleanupIOThread() { |
- DCHECK(is_io_thread()); |
- |
- delete backend_impl_; |
- delete service_; |
- backend_impl_ = NULL; |
- service_ = NULL; |
- io_message_loop_ = NULL; |
- |
- // Just in case the main thread is waiting on it. |
- backend_proxy_->SignalEvent(); |
-} |
- |
-WebApplicationCacheHost* SimpleAppCacheSystem::CreateCacheHostForWebKit( |
- WebApplicationCacheHostClient* client) { |
- if (!is_initailized_on_ui_thread()) |
- return NULL; |
- |
- DCHECK(is_ui_thread()); |
- |
- // The IO thread needs to be running for this system to work. |
- SimpleResourceLoaderBridge::EnsureIOThread(); |
- |
- if (!is_initialized()) |
- return NULL; |
- return new WebApplicationCacheHostImpl(client, backend_proxy_.get()); |
-} |
- |
-void SimpleAppCacheSystem::SetExtraRequestBits( |
- net::URLRequest* request, int host_id, ResourceType::Type resource_type) { |
- if (is_initialized()) { |
- DCHECK(is_io_thread()); |
- AppCacheInterceptor::SetExtraRequestInfo( |
- request, service_, kSingleProcessId, host_id, resource_type); |
- } |
-} |
- |
-void SimpleAppCacheSystem::GetExtraResponseBits( |
- net::URLRequest* request, int64* cache_id, GURL* manifest_url) { |
- if (is_initialized()) { |
- DCHECK(is_io_thread()); |
- AppCacheInterceptor::GetExtraResponseInfo( |
- request, cache_id, manifest_url); |
- } |
-} |