| Index: chrome/browser/ui/webui/slideshow_ui.cc
|
| ===================================================================
|
| --- chrome/browser/ui/webui/slideshow_ui.cc (revision 82643)
|
| +++ chrome/browser/ui/webui/slideshow_ui.cc (working copy)
|
| @@ -1,284 +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 "chrome/browser/ui/webui/slideshow_ui.h"
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/memory/singleton.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/path_service.h"
|
| -#include "base/string_piece.h"
|
| -#include "base/string_util.h"
|
| -#include "base/threading/thread.h"
|
| -#include "base/time.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/history/history_types.h"
|
| -#include "chrome/browser/metrics/user_metrics.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/webui/favicon_source.h"
|
| -#include "chrome/common/chrome_paths.h"
|
| -#include "chrome/common/jstemplate_builder.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "content/browser/browser_thread.h"
|
| -#include "content/browser/tab_contents/tab_contents.h"
|
| -#include "grit/browser_resources.h"
|
| -#include "grit/chromium_strings.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "grit/locale_settings.h"
|
| -#include "net/base/directory_lister.h"
|
| -#include "net/base/escape.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -
|
| -static const char kPropertyPath[] = "path";
|
| -static const char kPropertyTitle[] = "title";
|
| -static const char kPropertyOffset[] = "currentOffset";
|
| -static const char kPropertyDirectory[] = "isDirectory";
|
| -
|
| -class SlideshowUIHTMLSource : public ChromeURLDataManager::DataSource {
|
| - public:
|
| - SlideshowUIHTMLSource();
|
| -
|
| - // Called when the network layer has requested a resource underneath
|
| - // the path we registered.
|
| - virtual void StartDataRequest(const std::string& path,
|
| - bool is_incognito,
|
| - int request_id);
|
| - virtual std::string GetMimeType(const std::string&) const {
|
| - return "text/html";
|
| - }
|
| -
|
| - private:
|
| - ~SlideshowUIHTMLSource() {}
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SlideshowUIHTMLSource);
|
| -};
|
| -
|
| -// The handler for Javascript messages related to the "slideshow" view.
|
| -class SlideshowHandler : public net::DirectoryLister::DirectoryListerDelegate,
|
| - public WebUIMessageHandler,
|
| - public base::SupportsWeakPtr<SlideshowHandler> {
|
| - public:
|
| - SlideshowHandler();
|
| - virtual ~SlideshowHandler();
|
| -
|
| - // Init work after Attach.
|
| - void Init();
|
| -
|
| - // DirectoryLister::DirectoryListerDelegate methods:
|
| - virtual void OnListFile(
|
| - const net::DirectoryLister::DirectoryListerData& data);
|
| - virtual void OnListDone(int error);
|
| -
|
| - // WebUIMessageHandler implementation.
|
| - virtual WebUIMessageHandler* Attach(WebUI* web_ui);
|
| - virtual void RegisterMessages();
|
| -
|
| - void GetChildrenForPath(const FilePath& path, bool is_refresh);
|
| -
|
| - // Callback for the "getChildren" message.
|
| - void HandleGetChildren(const ListValue* args);
|
| -
|
| - void HandleRefreshDirectory(const ListValue* args);
|
| -
|
| - private:
|
| - bool PathIsImageFile(const char* filename);
|
| -
|
| - scoped_ptr<ListValue> filelist_value_;
|
| - FilePath currentpath_;
|
| - FilePath originalpath_;
|
| - Profile* profile_;
|
| - int counter_;
|
| - int currentOffset_;
|
| - scoped_refptr<net::DirectoryLister> lister_;
|
| - bool is_refresh_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SlideshowHandler);
|
| -};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -//
|
| -// SlideshowHTMLSource
|
| -//
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -SlideshowUIHTMLSource::SlideshowUIHTMLSource()
|
| - : DataSource(chrome::kChromeUISlideshowHost, MessageLoop::current()) {
|
| -}
|
| -
|
| -void SlideshowUIHTMLSource::StartDataRequest(const std::string& path,
|
| - bool is_incognito,
|
| - int request_id) {
|
| - DictionaryValue localized_strings;
|
| - // TODO(dhg): Add stirings to localized strings, also add more strings
|
| - // that are currently hardcoded.
|
| - SetFontAndTextDirection(&localized_strings);
|
| -
|
| - static const base::StringPiece slideshow_html(
|
| - ResourceBundle::GetSharedInstance().GetRawDataResource(
|
| - IDR_SLIDESHOW_HTML));
|
| - const std::string full_html = jstemplate_builder::GetI18nTemplateHtml(
|
| - slideshow_html, &localized_strings);
|
| -
|
| - scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes);
|
| - html_bytes->data.resize(full_html.size());
|
| - std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin());
|
| -
|
| - SendResponse(request_id, html_bytes);
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -//
|
| -// SlideshowHandler
|
| -//
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -SlideshowHandler::SlideshowHandler()
|
| - : profile_(NULL),
|
| - is_refresh_(false) {
|
| - lister_ = NULL;
|
| -}
|
| -
|
| -SlideshowHandler::~SlideshowHandler() {
|
| - if (lister_.get()) {
|
| - lister_->Cancel();
|
| - lister_->set_delegate(NULL);
|
| - }
|
| -}
|
| -
|
| -WebUIMessageHandler* SlideshowHandler::Attach(WebUI* web_ui) {
|
| - profile_ = web_ui->GetProfile();
|
| - // Create our favicon data source.
|
| - profile_->GetChromeURLDataManager()->AddDataSource(
|
| - new FaviconSource(profile_, FaviconSource::FAVICON));
|
| - return WebUIMessageHandler::Attach(web_ui);
|
| -}
|
| -
|
| -void SlideshowHandler::Init() {
|
| -}
|
| -
|
| -void SlideshowHandler::RegisterMessages() {
|
| - web_ui_->RegisterMessageCallback("getChildren",
|
| - NewCallback(this, &SlideshowHandler::HandleGetChildren));
|
| - web_ui_->RegisterMessageCallback("refreshDirectory",
|
| - NewCallback(this, &SlideshowHandler::HandleRefreshDirectory));
|
| -}
|
| -
|
| -void SlideshowHandler::HandleRefreshDirectory(const ListValue* args) {
|
| -#if defined(OS_CHROMEOS)
|
| - std::string path = UTF16ToUTF8(ExtractStringValue(args));
|
| - GetChildrenForPath(FilePath(path), true);
|
| -#endif
|
| -}
|
| -
|
| -void SlideshowHandler::GetChildrenForPath(const FilePath& path,
|
| - bool is_refresh) {
|
| - filelist_value_.reset(new ListValue());
|
| - currentpath_ = path;
|
| -
|
| - if (lister_.get()) {
|
| - lister_->Cancel();
|
| - lister_->set_delegate(NULL);
|
| - lister_ = NULL;
|
| - }
|
| -
|
| - is_refresh_ = is_refresh;
|
| - if (file_util::EnsureEndsWithSeparator(¤tpath_) &&
|
| - currentpath_.IsAbsolute()) {
|
| - lister_ = new net::DirectoryLister(currentpath_, this);
|
| - } else {
|
| - originalpath_ = currentpath_;
|
| - currentpath_ = currentpath_.DirName();
|
| - lister_ = new net::DirectoryLister(currentpath_, this);
|
| - }
|
| - counter_ = 0;
|
| - currentOffset_ = -1;
|
| - lister_->Start();
|
| -}
|
| -
|
| -void SlideshowHandler::HandleGetChildren(const ListValue* args) {
|
| -#if defined(OS_CHROMEOS)
|
| - filelist_value_.reset(new ListValue());
|
| - std::string path = UTF16ToUTF8(ExtractStringValue(args));
|
| - GetChildrenForPath(FilePath(path), false);
|
| -#endif
|
| -}
|
| -
|
| -bool SlideshowHandler::PathIsImageFile(const char* filename) {
|
| -#if defined(OS_CHROMEOS)
|
| - FilePath file = FilePath(filename);
|
| - std::string ext = file.Extension();
|
| - ext = StringToLowerASCII(ext);
|
| - if (ext == ".jpg" ||
|
| - ext == ".jpeg" ||
|
| - ext == ".png" ||
|
| - ext == ".gif") {
|
| - return true;
|
| - } else {
|
| - return false;
|
| - }
|
| -#else
|
| - return false;
|
| -#endif
|
| -}
|
| -
|
| -void SlideshowHandler::OnListFile(
|
| - const net::DirectoryLister::DirectoryListerData& data) {
|
| -#if defined(OS_CHROMEOS)
|
| - if (data.info.filename[0] == '.') {
|
| - return;
|
| - }
|
| - if (!PathIsImageFile(data.info.filename.c_str())) {
|
| - return;
|
| - }
|
| -
|
| - DictionaryValue* file_value = new DictionaryValue();
|
| -
|
| - file_value->SetString(kPropertyTitle, data.info.filename);
|
| - file_value->SetString(kPropertyPath,
|
| - currentpath_.Append(data.info.filename).value());
|
| - file_value->SetBoolean(kPropertyDirectory, S_ISDIR(data.info.stat.st_mode));
|
| - filelist_value_->Append(file_value);
|
| - std::string val;
|
| - file_value->GetString(kPropertyTitle, &val);
|
| - if (val == originalpath_.BaseName().value()) {
|
| - currentOffset_ = counter_;
|
| - }
|
| - counter_++;
|
| -#endif
|
| -}
|
| -
|
| -void SlideshowHandler::OnListDone(int error) {
|
| - DictionaryValue info_value;
|
| - counter_ = 0;
|
| - if (!(file_util::EnsureEndsWithSeparator(&originalpath_) &&
|
| - originalpath_.IsAbsolute()) &&
|
| - currentOffset_ != -1) {
|
| - info_value.SetInteger(kPropertyOffset, currentOffset_);
|
| - }
|
| - if (is_refresh_) {
|
| - info_value.SetString("functionCall", "refresh");
|
| - } else {
|
| - info_value.SetString("functionCall", "getChildren");
|
| - }
|
| - info_value.SetString(kPropertyPath, currentpath_.value());
|
| - web_ui_->CallJavascriptFunction("browseFileResult",
|
| - info_value, *(filelist_value_.get()));
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -//
|
| -// SlideshowUI
|
| -//
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -SlideshowUI::SlideshowUI(TabContents* contents) : WebUI(contents) {
|
| - SlideshowHandler* handler = new SlideshowHandler();
|
| - AddMessageHandler((handler)->Attach(this));
|
| - handler->Init();
|
| - SlideshowUIHTMLSource* html_source = new SlideshowUIHTMLSource();
|
| -
|
| - // Set up the chrome://slideshow/ source.
|
| - contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source);
|
| -}
|
|
|