Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Side by Side Diff: chrome/browser/devtools/devtools_window.cc

Issue 11570081: Support file system access in DevTools with isolated file system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Inlined methods Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 // static 89 // static
90 void DevToolsWindow::RegisterUserPrefs(PrefServiceSyncable* prefs) { 90 void DevToolsWindow::RegisterUserPrefs(PrefServiceSyncable* prefs) {
91 prefs->RegisterBooleanPref(prefs::kDevToolsOpenDocked, 91 prefs->RegisterBooleanPref(prefs::kDevToolsOpenDocked,
92 true, 92 true,
93 PrefServiceSyncable::UNSYNCABLE_PREF); 93 PrefServiceSyncable::UNSYNCABLE_PREF);
94 prefs->RegisterStringPref(prefs::kDevToolsDockSide, 94 prefs->RegisterStringPref(prefs::kDevToolsDockSide,
95 kDockSideBottom, 95 kDockSideBottom,
96 PrefServiceSyncable::UNSYNCABLE_PREF); 96 PrefServiceSyncable::UNSYNCABLE_PREF);
97 prefs->RegisterDictionaryPref(prefs::kDevToolsEditedFiles, 97 prefs->RegisterDictionaryPref(prefs::kDevToolsEditedFiles,
98 PrefServiceSyncable::UNSYNCABLE_PREF); 98 PrefServiceSyncable::UNSYNCABLE_PREF);
99 prefs->RegisterDictionaryPref(prefs::kDevToolsFilesystemPaths,
100 PrefServiceSyncable::UNSYNCABLE_PREF);
99 } 101 }
100 102
101 // static 103 // static
102 DevToolsWindow* DevToolsWindow::GetDockedInstanceForInspectedTab( 104 DevToolsWindow* DevToolsWindow::GetDockedInstanceForInspectedTab(
103 WebContents* inspected_web_contents) { 105 WebContents* inspected_web_contents) {
104 if (!inspected_web_contents) 106 if (!inspected_web_contents)
105 return NULL; 107 return NULL;
106 108
107 if (!DevToolsAgentHost::HasFor(inspected_web_contents->GetRenderViewHost())) 109 if (!DevToolsAgentHost::HasFor(inspected_web_contents->GetRenderViewHost()))
108 return NULL; 110 return NULL;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 web_contents_(web_contents), 210 web_contents_(web_contents),
209 browser_(NULL), 211 browser_(NULL),
210 dock_side_(dock_side), 212 dock_side_(dock_side),
211 is_loaded_(false), 213 is_loaded_(false),
212 action_on_load_(DEVTOOLS_TOGGLE_ACTION_SHOW), 214 action_on_load_(DEVTOOLS_TOGGLE_ACTION_SHOW),
213 weak_factory_(this), 215 weak_factory_(this),
214 width_(-1), 216 width_(-1),
215 height_(-1) { 217 height_(-1) {
216 frontend_host_ = DevToolsClientHost::CreateDevToolsFrontendHost(web_contents, 218 frontend_host_ = DevToolsClientHost::CreateDevToolsFrontendHost(web_contents,
217 this); 219 this);
218 file_helper_.reset(new DevToolsFileHelper(profile)); 220 file_helper_.reset(new DevToolsFileHelper(web_contents, profile));
219 221
220 g_instances.Get().push_back(this); 222 g_instances.Get().push_back(this);
221 // Wipe out page icon so that the default application icon is used. 223 // Wipe out page icon so that the default application icon is used.
222 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); 224 NavigationEntry* entry = web_contents->GetController().GetActiveEntry();
223 entry->GetFavicon().image = gfx::Image(); 225 entry->GetFavicon().image = gfx::Image();
224 entry->GetFavicon().valid = true; 226 entry->GetFavicon().valid = true;
225 227
226 // Register on-load actions. 228 // Register on-load actions.
227 registrar_.Add( 229 registrar_.Add(
228 this, 230 this,
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 } 502 }
501 503
502 WebContents* DevToolsWindow::OpenURLFromTab(WebContents* source, 504 WebContents* DevToolsWindow::OpenURLFromTab(WebContents* source,
503 const OpenURLParams& params) { 505 const OpenURLParams& params) {
504 if (inspected_web_contents_) 506 if (inspected_web_contents_)
505 return inspected_web_contents_->OpenURL(params); 507 return inspected_web_contents_->OpenURL(params);
506 return NULL; 508 return NULL;
507 } 509 }
508 510
509 void DevToolsWindow::CallClientFunction(const std::string& function_name, 511 void DevToolsWindow::CallClientFunction(const std::string& function_name,
510 const Value* arg) { 512 const Value* arg1,
511 std::string json; 513 const Value* arg2) {
512 if (arg) 514 std::string params;
513 base::JSONWriter::Write(arg, &json); 515 if (arg1) {
514 516 std::string json;
515 string16 javascript = 517 base::JSONWriter::Write(arg1, &json);
516 ASCIIToUTF16(function_name + "(" + json + ");"); 518 params.append(json);
519 if (arg2) {
520 base::JSONWriter::Write(arg2, &json);
521 params.append(", " + json);
522 }
523 }
524 string16 javascript = ASCIIToUTF16(function_name + "(" + params + ");");
517 web_contents_->GetRenderViewHost()-> 525 web_contents_->GetRenderViewHost()->
518 ExecuteJavascriptInWebFrame(string16(), javascript); 526 ExecuteJavascriptInWebFrame(string16(), javascript);
519 } 527 }
520 528
521 void DevToolsWindow::Observe(int type, 529 void DevToolsWindow::Observe(int type,
522 const content::NotificationSource& source, 530 const content::NotificationSource& source,
523 const content::NotificationDetails& details) { 531 const content::NotificationDetails& details) {
524 if (type == content::NOTIFICATION_LOAD_STOP && !is_loaded_) { 532 if (type == content::NOTIFICATION_LOAD_STOP && !is_loaded_) {
525 is_loaded_ = true; 533 is_loaded_ = true;
526 UpdateTheme(); 534 UpdateTheme();
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 url)); 827 url));
820 } 828 }
821 829
822 void DevToolsWindow::AppendToFile(const std::string& url, 830 void DevToolsWindow::AppendToFile(const std::string& url,
823 const std::string& content) { 831 const std::string& content) {
824 file_helper_->Append(url, content, Bind(&DevToolsWindow::AppendedTo, 832 file_helper_->Append(url, content, Bind(&DevToolsWindow::AppendedTo,
825 weak_factory_.GetWeakPtr(), 833 weak_factory_.GetWeakPtr(),
826 url)); 834 url));
827 } 835 }
828 836
837 namespace {
838
839 DictionaryValue* CreateFilesystemValue(
840 DevToolsFileHelper::Filesystem filesystem) {
841 DictionaryValue* filesystem_value = new DictionaryValue();
842 filesystem_value->SetString("filesystemId", filesystem.filesystem_id);
843 filesystem_value->SetString("registeredName", filesystem.registered_name);
844 filesystem_value->SetString("filesystemPath", filesystem.filesystem_path);
845 return filesystem_value;
846 }
847
848 } // namespace
849
850 void DevToolsWindow::RequestFilesystems() {
851 file_helper_->RequestFilesystems(
pfeldman 2012/12/29 10:23:02 RestoreFilesystems new DevToolsFileHelper(web_con
852 Bind(&DevToolsWindow::FilesystemsLoaded, weak_factory_.GetWeakPtr()));
853 }
854
855 void DevToolsWindow::AddFilesystem() {
856 file_helper_->AddFilesystem(
857 Bind(&DevToolsWindow::FilesystemAdded, weak_factory_.GetWeakPtr()));
858 }
859
860 void DevToolsWindow::RemoveFilesystem(const std::string& filesystem_path) {
861 file_helper_->RemoveFilesystem(filesystem_path);
862 StringValue filesystem_path_value(filesystem_path);
863 CallClientFunction("InspectorFrontendAPI.filesystemRemoved",
864 &filesystem_path_value);
865 }
866
829 void DevToolsWindow::FileSavedAs(const std::string& url) { 867 void DevToolsWindow::FileSavedAs(const std::string& url) {
830 StringValue url_value(url); 868 StringValue url_value(url);
831 CallClientFunction("InspectorFrontendAPI.savedURL", &url_value); 869 CallClientFunction("InspectorFrontendAPI.savedURL", &url_value);
832 } 870 }
833 871
834 void DevToolsWindow::AppendedTo(const std::string& url) { 872 void DevToolsWindow::AppendedTo(const std::string& url) {
835 StringValue url_value(url); 873 StringValue url_value(url);
836 CallClientFunction("InspectorFrontendAPI.appendedToURL", &url_value); 874 CallClientFunction("InspectorFrontendAPI.appendedToURL", &url_value);
837 } 875 }
838 876
877 void DevToolsWindow::FilesystemsLoaded(
878 const std::vector<DevToolsFileHelper::Filesystem>& filesystems) {
879 ListValue filesystems_value;
880 for (size_t i = 0; i < filesystems.size(); ++i) {
881 filesystems_value.Append(CreateFilesystemValue(filesystems[i]));
882 }
883 CallClientFunction("InspectorFrontendAPI.filesystemsLoaded",
884 &filesystems_value);
885 }
886
887 void DevToolsWindow::FilesystemAdded(
888 std::string error_string,
889 const DevToolsFileHelper::Filesystem& filesystem) {
890 StringValue error_string_value(error_string);
891 DictionaryValue* filesystem_value = NULL;
892 if (!filesystem.filesystem_path.empty())
893 filesystem_value = CreateFilesystemValue(filesystem);
894 CallClientFunction("InspectorFrontendAPI.filesystemAdded",
895 &error_string_value,
896 filesystem_value);
897 if (filesystem_value)
898 delete filesystem_value;
899 }
900
839 content::JavaScriptDialogCreator* DevToolsWindow::GetJavaScriptDialogCreator() { 901 content::JavaScriptDialogCreator* DevToolsWindow::GetJavaScriptDialogCreator() {
840 if (inspected_web_contents_ && inspected_web_contents_->GetDelegate()) { 902 if (inspected_web_contents_ && inspected_web_contents_->GetDelegate()) {
841 return inspected_web_contents_->GetDelegate()-> 903 return inspected_web_contents_->GetDelegate()->
842 GetJavaScriptDialogCreator(); 904 GetJavaScriptDialogCreator();
843 } 905 }
844 return content::WebContentsDelegate::GetJavaScriptDialogCreator(); 906 return content::WebContentsDelegate::GetJavaScriptDialogCreator();
845 } 907 }
846 908
847 void DevToolsWindow::RunFileChooser(WebContents* web_contents, 909 void DevToolsWindow::RunFileChooser(WebContents* web_contents,
848 const FileChooserParams& params) { 910 const FileChooserParams& params) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 968
907 // static 969 // static
908 DevToolsDockSide DevToolsWindow::SideFromString( 970 DevToolsDockSide DevToolsWindow::SideFromString(
909 const std::string& dock_side) { 971 const std::string& dock_side) {
910 if (dock_side == kDockSideRight) 972 if (dock_side == kDockSideRight)
911 return DEVTOOLS_DOCK_SIDE_RIGHT; 973 return DEVTOOLS_DOCK_SIDE_RIGHT;
912 if (dock_side == kDockSideBottom) 974 if (dock_side == kDockSideBottom)
913 return DEVTOOLS_DOCK_SIDE_BOTTOM; 975 return DEVTOOLS_DOCK_SIDE_BOTTOM;
914 return DEVTOOLS_DOCK_SIDE_UNDOCKED; 976 return DEVTOOLS_DOCK_SIDE_UNDOCKED;
915 } 977 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698