Index: chrome/browser/extensions/file_manager_util.cc |
=================================================================== |
--- chrome/browser/extensions/file_manager_util.cc (revision 0) |
+++ chrome/browser/extensions/file_manager_util.cc (revision 0) |
@@ -0,0 +1,132 @@ |
+// 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/extensions/file_manager_util.h" |
+ |
+#include "base/json/json_writer.h" |
+#include "base/logging.h" |
+#include "base/utf_string_conversions.h" |
+#include "base/values.h" |
+#include "chrome/browser/metrics/user_metrics.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_list.h" |
+#include "third_party/libjingle/source/talk/base/urlencode.h" |
+ |
+// This is the "well known" url for the file manager extension from |
+// browser/resources/file_manager. In the future we may provide a way to swap |
+// out this file manager for an aftermarket part, but not yet. |
+const char kBaseFileBrowserUrl[] = |
+ "chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/main.html"; |
+ |
+// static |
+GURL FileManagerUtil::GetFileBrowserUrl() { |
+ return GURL(kBaseFileBrowserUrl); |
+} |
+ |
+// static |
+GURL FileManagerUtil::GetFileBrowserUrlWithParams( |
+ SelectFileDialog::Type type, |
+ const string16& title, |
+ const FilePath& default_path, |
+ const SelectFileDialog::FileTypeInfo* file_types, |
+ int file_type_index, |
+ const FilePath::StringType& default_extension) { |
+ std::string json = GetArgumentsJson(type, title, default_path, file_types, |
+ file_type_index, default_extension); |
+ return GURL(FileManagerUtil::GetFileBrowserUrl().spec() + "?" + |
+ UrlEncodeStringWithoutEncodingSpaceAsPlus(json)); |
+ |
+} |
+// static |
+void FileManagerUtil::ShowFullTabUrl(Profile* profile, |
+ const FilePath& default_path) { |
+ std::string json = GetArgumentsJson(SelectFileDialog::SELECT_NONE, string16(), |
+ default_path, NULL, 0, FilePath::StringType()); |
+ GURL url(std::string(kBaseFileBrowserUrl) + "?" + |
+ UrlEncodeStringWithoutEncodingSpaceAsPlus(json)); |
+ Browser* browser = BrowserList::GetLastActive(); |
+ if (!browser) |
+ return; |
+ |
+ UserMetrics::RecordAction(UserMetricsAction("ShowFileBrowserFullTab"), |
+ profile); |
+ browser->ShowSingletonTab(GURL(url)); |
+} |
+ |
+// static |
+std::string FileManagerUtil::GetArgumentsJson( |
+ SelectFileDialog::Type type, |
+ const string16& title, |
+ const FilePath& default_path, |
+ const SelectFileDialog::FileTypeInfo* file_types, |
+ int file_type_index, |
+ const FilePath::StringType& default_extension) { |
+ DictionaryValue arg_value; |
+ arg_value.SetString("type", GetDialogTypeAsString(type)); |
+ arg_value.SetString("title", title); |
+ // TODO(zelidrag): Convert local system path into virtual path for File API. |
+ arg_value.SetString("defaultPath", default_path.value()); |
+ arg_value.SetString("defaultExtension", default_extension); |
+ |
+ ListValue* types_list = new ListValue(); |
+ |
+ if (file_types) { |
+ for (size_t i = 0; i < file_types->extensions.size(); ++i) { |
+ ListValue* extensions_list = new ListValue(); |
+ for (size_t j = 0; j < file_types->extensions[i].size(); ++j) { |
+ extensions_list->Set( |
+ i, Value::CreateStringValue(file_types->extensions[i][j])); |
+ } |
+ |
+ DictionaryValue* dict = new DictionaryValue(); |
+ dict->Set("extensions", extensions_list); |
+ |
+ if (i < file_types->extension_description_overrides.size()) { |
+ string16 desc = file_types->extension_description_overrides[i]; |
+ dict->SetString("description", desc); |
+ } |
+ |
+ dict->SetBoolean("selected", |
+ (static_cast<size_t>(file_type_index) == i)); |
+ |
+ types_list->Set(i, dict); |
+ } |
+ } |
+ |
+ std::string rv; |
+ base::JSONWriter::Write(&arg_value, false, &rv); |
+ |
+ return rv; |
+} |
+ |
+// static |
+std::string FileManagerUtil::GetDialogTypeAsString( |
+ SelectFileDialog::Type dialog_type) { |
+ std::string type_str; |
+ switch (dialog_type) { |
+ case SelectFileDialog::SELECT_NONE: |
+ type_str = "none"; |
+ break; |
+ |
+ case SelectFileDialog::SELECT_FOLDER: |
+ type_str = "folder"; |
+ break; |
+ |
+ case SelectFileDialog::SELECT_SAVEAS_FILE: |
+ type_str = "saveas-file"; |
+ break; |
+ |
+ case SelectFileDialog::SELECT_OPEN_FILE: |
+ type_str = "open-file"; |
+ break; |
+ |
+ case SelectFileDialog::SELECT_OPEN_MULTI_FILE: |
+ type_str = "open-multi-file"; |
+ break; |
+ |
+ default: |
+ NOTREACHED(); |
+ } |
+ |
+ return type_str; |
+} |
Property changes on: chrome/browser/extensions/file_manager_util.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |