Index: chrome/browser/chromeos/dom_ui/imageburner_ui.h |
=================================================================== |
--- chrome/browser/chromeos/dom_ui/imageburner_ui.h (revision 0) |
+++ chrome/browser/chromeos/dom_ui/imageburner_ui.h (revision 0) |
@@ -0,0 +1,219 @@ |
+// Copyright (c) 2010 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_CHROMEOS_DOM_UI_IMAGEBURNER_UI_H_ |
+#define CHROME_BROWSER_CHROMEOS_DOM_UI_IMAGEBURNER_UI_H_ |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "app/download_file_interface.h" |
+#include "base/file_path.h" |
+#include "base/file_util.h" |
+#include "base/scoped_ptr.h" |
+#include "base/values.h" |
+#include "chrome/browser/chromeos/cros/burn_library.h" |
+#include "chrome/browser/chromeos/cros/cros_library.h" |
+#include "chrome/browser/chromeos/cros/mount_library.h" |
+#include "chrome/browser/dom_ui/chrome_url_data_manager.h" |
+#include "chrome/browser/dom_ui/dom_ui.h" |
+#include "chrome/browser/download/download_item.h" |
+#include "chrome/browser/download/download_manager.h" |
+#include "chrome/browser/download/download_util.h" |
+#include "chrome/browser/tab_contents/tab_contents.h" |
+#include "googleurl/src/gurl.h" |
+#include "net/base/file_stream.h" |
+ |
+static const std::string kPropertyPath = "path"; |
+static const std::string kPropertyTitle = "title"; |
+static const std::string kPropertyDirectory = "isDirectory"; |
+static const std::string kImageBaseURL = |
+ "http://chrome-master.mtv.corp.google.com/chromeos/dev-channel/"; |
+static const std::string kImageFetcherName = "LATEST-x86-generic"; |
+static const std::string kImageFileName = "chromeos_image.bin.gz"; |
+static const std::string kTempImageFolderName = "chromeos_image"; |
+ |
+class ImageBurnResourceManager; |
+ |
+class ImageBurnUIHTMLSource : public ChromeURLDataManager::DataSource { |
+ public: |
+ ImageBurnUIHTMLSource(); |
+ |
+ // Called when the network layer has requested a resource underneath |
+ // the path we registered. |
+ virtual void StartDataRequest(const std::string& path, |
+ bool is_off_the_record, |
+ int request_id); |
+ virtual std::string GetMimeType(const std::string&) const { |
+ return "text/html"; |
+ } |
+ |
+ private: |
+ ~ImageBurnUIHTMLSource() {} |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ImageBurnUIHTMLSource); |
+}; |
+ |
+class ImageBurnHandler : public DOMMessageHandler, |
+ public chromeos::MountLibrary::Observer, |
+ public chromeos::BurnLibrary::Observer, |
+ public DownloadManager::Observer, |
+ public DownloadItem::Observer, |
+ public base::SupportsWeakPtr<ImageBurnHandler> { |
+ public: |
+ explicit ImageBurnHandler(TabContents* contents); |
+ virtual ~ImageBurnHandler(); |
+ |
+ // DOMMessageHandler implementation. |
+ virtual DOMMessageHandler* Attach(DOMUI* dom_ui); |
+ virtual void RegisterMessages(); |
+ |
+ // chromeos::MountLibrary::Observer interface |
+ virtual void MountChanged(chromeos::MountLibrary* obj, |
+ chromeos::MountEventType evt, |
+ const std::string& path); |
+ |
+ // chromeos::BurnLibrary::Observer interface |
+ virtual void ProgressUpdated(chromeos::BurnLibrary* object, |
+ chromeos::BurnEventType evt, |
+ const ImageBurnStatus& status); |
+ |
+ // DownloadItem::Observer interface |
+ virtual void OnDownloadUpdated(DownloadItem* download); |
+ virtual void OnDownloadFileCompleted(DownloadItem* download); |
+ virtual void OnDownloadOpened(DownloadItem* download); |
+ |
+ // DownloadManager::Observer interface |
+ virtual void ModelChanged(); |
+ |
+ void CreateImageUrlCallback(GURL* image_url); |
+ |
+ |
+ private: |
+ // Callback for the "getRoots" message. |
+ void HandleGetRoots(const ListValue* args); |
+ |
+ // Callback for the "downloadImage" message. |
+ void HandleDownloadImage(const ListValue* args); |
+ |
+ // Callback for the "burnImage" message. |
+ void HandleBurnImage(const ListValue* args); |
+ |
+ // Callback for the "cancelBurnImage" message. |
+ void HandleCancelBurnImage(const ListValue* args); |
+ |
+ void DownloadCompleted(bool success); |
+ |
+ void BurnImage(); |
+ void FinalizeBurn(bool successful); |
+ |
+ void UpdateBurnProgress(int64 total_burnt, int64 image_size, |
+ const std::string& path, chromeos::BurnEventType evt); |
+ std::wstring GetBurnProgressText(int64 total_burnt, int64 image_size); |
+ |
+ // helper functions |
+ void CreateImageUrl(); |
+ void ExtractTargetedDeviceSystemPath(const ListValue* list_value); |
+ void CreateLocalImagePath(); |
+ |
+ private: |
+ // file path |
+ FilePath local_image_file_path_; |
+ FilePath image_target_; |
+ GURL* image_download_url_; |
+ TabContents* tab_contents_; |
+ DownloadManager* download_manager_; |
+ bool download_item_observer_added_; |
+ DownloadItem* active_download_item_; |
+ ImageBurnResourceManager* burn_resource_manager_; |
+ |
+ friend class ImageBurnTaskProxy; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ImageBurnHandler); |
+}; |
+ |
+class ImageBurnTaskProxy |
+ : public base::RefCountedThreadSafe<ImageBurnTaskProxy> { |
+ public: |
+ explicit ImageBurnTaskProxy(const base::WeakPtr<ImageBurnHandler>& handler); |
+ |
+ bool ReportDownloadInitialized(); |
+ bool CheckDownloadFinished(); |
+ void BurnImage(); |
+ void FinalizeBurn(bool success); |
+ |
+ void CreateImageUrl(TabContents* tab_contents, ImageBurnHandler* downloader); |
+ |
+ private: |
+ base::WeakPtr<ImageBurnHandler> handler_; |
+ ImageBurnResourceManager* resource_manager_; |
+ |
+ friend class base::RefCountedThreadSafe<ImageBurnTaskProxy>; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ImageBurnTaskProxy); |
+}; |
+ |
+class ImageBurnResourceManager : public DownloadManager::Observer, |
+ public DownloadItem::Observer { |
+ public: |
+ ImageBurnResourceManager(); |
+ ~ImageBurnResourceManager(); |
+ |
+ // DownloadItem::Observer interface |
+ virtual void OnDownloadUpdated(DownloadItem* download); |
+ virtual void OnDownloadFileCompleted(DownloadItem* download); |
+ virtual void OnDownloadOpened(DownloadItem* download); |
+ |
+ // DownloadManager::Observer interface |
+ virtual void ModelChanged(); |
+ |
+ FilePath GetLocalImageDirPath(); |
+ |
+ bool CheckImageDownloadStarted(); |
+ |
+ void ReportImageDownloadStarted(); |
+ |
+ bool CheckDownloadFinished(); |
+ |
+ bool CheckBurnInProgress(); |
+ |
+ void SetBurnInProgress(bool value); |
+ |
+ void ReportDownloadFinished(bool success); |
+ |
+ void CreateImageUrl(TabContents* tab_content, ImageBurnHandler* downloader); |
+ |
+ void ImageUrlFetched(bool success); |
+ |
+ net::FileStream* CreateFileStream(FilePath* file_path); |
+ |
+ private: |
+ FilePath local_image_dir_file_path_; |
+ FilePath image_fecher_local_path_; |
+ bool image_download_started_; |
+ bool image_download_finished_; |
+ bool burn_in_progress_; |
+ DownloadManager* download_manager_; |
+ bool download_item_observer_added_; |
+ DownloadItem* active_download_item_; |
+ scoped_ptr<GURL> image_url_; |
+ GURL image_fetcher_url_; |
+ bool image_url_fetching_requested_; |
+ bool image_url_fetched_; |
+ std::vector<ImageBurnHandler*> downloaders_; |
+ |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ImageBurnResourceManager); |
+}; |
+ |
+class ImageBurnUI : public DOMUI { |
+ public: |
+ explicit ImageBurnUI(TabContents* contents); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ImageBurnUI); |
+}; |
+#endif // CHROME_BROWSER_CHROMEOS_DOM_UI_IMAGEBURNER_UI_H_ |
+ |