Adding URLResponse Disk Cache to mojo.
This CL introduces a url response disk cache that allows the shell and content
handlers to access cached response data as file without the need to
stream the full content nor create a new file. It also allows
content handlers to access uncompressed cached archive.
The cache service is loaded internally by the shell because it is used
during application loads.
The android handler is using this service to cache the uncompressed archive of
android applications and the compiled dex files
R=blundell@chromium.org, davemoore@chromium.org
Review URL: https://codereview.chromium.org/1088533003
diff --git a/shell/background_application_loader.h b/shell/background_application_loader.h
new file mode 100644
index 0000000..6d9cb6d
--- /dev/null
+++ b/shell/background_application_loader.h
@@ -0,0 +1,63 @@
+// Copyright 2014 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 SHELL_BACKGROUND_APPLICATION_LOADER_H_
+#define SHELL_BACKGROUND_APPLICATION_LOADER_H_
+
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/simple_thread.h"
+#include "shell/application_manager/application_loader.h"
+
+namespace shell {
+
+class BackgroundApplicationLoader
+ : public ApplicationLoader,
+ public base::DelegateSimpleThread::Delegate {
+ public:
+ BackgroundApplicationLoader(scoped_ptr<ApplicationLoader> real_loader,
+ const std::string& thread_name,
+ base::MessageLoop::Type message_loop_type);
+ ~BackgroundApplicationLoader() override;
+
+ // ApplicationLoader overrides:
+ void Load(
+ const GURL& url,
+ mojo::InterfaceRequest<mojo::Application> application_request) override;
+
+ private:
+ // |base::DelegateSimpleThread::Delegate| method:
+ void Run() override;
+
+ // These functions are exected on the background thread. They call through
+ // to |background_loader_| to do the actual loading.
+ void LoadOnBackgroundThread(
+ const GURL& url,
+ mojo::InterfaceRequest<mojo::Application> application_request);
+ bool quit_on_shutdown_;
+ scoped_ptr<ApplicationLoader> loader_;
+
+ const base::MessageLoop::Type message_loop_type_;
+ const std::string thread_name_;
+
+ // Created on |thread_| during construction of |this|. Protected against
+ // uninitialized use by |message_loop_created_|, and protected against
+ // use-after-free by holding a reference to the thread-safe object. Note
+ // that holding a reference won't hold |thread_| from exiting.
+ scoped_refptr<base::TaskRunner> task_runner_;
+ base::WaitableEvent message_loop_created_;
+
+ // Lives on |thread_|.
+ base::Closure quit_closure_;
+
+ scoped_ptr<base::DelegateSimpleThread> thread_;
+
+ DISALLOW_COPY_AND_ASSIGN(BackgroundApplicationLoader);
+};
+
+} // namespace shell
+
+#endif // SHELL_BACKGROUND_APPLICATION_LOADER_H_