OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/devtools/devtools_ui_bindings.h" | 5 #include "chrome/browser/devtools/devtools_ui_bindings.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 int ResponseWriter::Write(net::IOBuffer* buffer, | 275 int ResponseWriter::Write(net::IOBuffer* buffer, |
276 int num_bytes, | 276 int num_bytes, |
277 const net::CompletionCallback& callback) { | 277 const net::CompletionCallback& callback) { |
278 std::string chunk = std::string(buffer->data(), num_bytes); | 278 std::string chunk = std::string(buffer->data(), num_bytes); |
279 bool encoded = false; | 279 bool encoded = false; |
280 if (!base::IsStringUTF8(chunk)) { | 280 if (!base::IsStringUTF8(chunk)) { |
281 encoded = true; | 281 encoded = true; |
282 base::Base64Encode(chunk, &chunk); | 282 base::Base64Encode(chunk, &chunk); |
283 } | 283 } |
284 | 284 |
285 base::FundamentalValue* id = new base::FundamentalValue(stream_id_); | 285 base::Value* id = new base::Value(stream_id_); |
286 base::StringValue* chunkValue = new base::StringValue(chunk); | 286 base::StringValue* chunkValue = new base::StringValue(chunk); |
287 base::FundamentalValue* encodedValue = new base::FundamentalValue(encoded); | 287 base::Value* encodedValue = new base::Value(encoded); |
288 | 288 |
289 content::BrowserThread::PostTask( | 289 content::BrowserThread::PostTask( |
290 content::BrowserThread::UI, FROM_HERE, | 290 content::BrowserThread::UI, FROM_HERE, |
291 base::Bind(&DevToolsUIBindings::CallClientFunction, bindings_, | 291 base::Bind(&DevToolsUIBindings::CallClientFunction, bindings_, |
292 "DevToolsAPI.streamWrite", base::Owned(id), | 292 "DevToolsAPI.streamWrite", base::Owned(id), |
293 base::Owned(chunkValue), base::Owned(encodedValue))); | 293 base::Owned(chunkValue), base::Owned(encodedValue))); |
294 return num_bytes; | 294 return num_bytes; |
295 } | 295 } |
296 | 296 |
297 int ResponseWriter::Finish(int net_error, | 297 int ResponseWriter::Finish(int net_error, |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 | 485 |
486 if (message.length() < kMaxMessageChunkSize) { | 486 if (message.length() < kMaxMessageChunkSize) { |
487 std::string param; | 487 std::string param; |
488 base::EscapeJSONString(message, true, ¶m); | 488 base::EscapeJSONString(message, true, ¶m); |
489 base::string16 javascript = | 489 base::string16 javascript = |
490 base::UTF8ToUTF16("DevToolsAPI.dispatchMessage(" + param + ");"); | 490 base::UTF8ToUTF16("DevToolsAPI.dispatchMessage(" + param + ");"); |
491 web_contents_->GetMainFrame()->ExecuteJavaScript(javascript); | 491 web_contents_->GetMainFrame()->ExecuteJavaScript(javascript); |
492 return; | 492 return; |
493 } | 493 } |
494 | 494 |
495 base::FundamentalValue total_size(static_cast<int>(message.length())); | 495 base::Value total_size(static_cast<int>(message.length())); |
496 for (size_t pos = 0; pos < message.length(); pos += kMaxMessageChunkSize) { | 496 for (size_t pos = 0; pos < message.length(); pos += kMaxMessageChunkSize) { |
497 base::StringValue message_value(message.substr(pos, kMaxMessageChunkSize)); | 497 base::StringValue message_value(message.substr(pos, kMaxMessageChunkSize)); |
498 CallClientFunction("DevToolsAPI.dispatchMessageChunk", | 498 CallClientFunction("DevToolsAPI.dispatchMessageChunk", |
499 &message_value, pos ? NULL : &total_size, NULL); | 499 &message_value, pos ? NULL : &total_size, NULL); |
500 } | 500 } |
501 } | 501 } |
502 | 502 |
503 void DevToolsUIBindings::AgentHostClosed( | 503 void DevToolsUIBindings::AgentHostClosed( |
504 content::DevToolsAgentHost* agent_host, | 504 content::DevToolsAgentHost* agent_host, |
505 bool replaced_with_another_client) { | 505 bool replaced_with_another_client) { |
506 DCHECK(agent_host == agent_host_.get()); | 506 DCHECK(agent_host == agent_host_.get()); |
507 agent_host_ = NULL; | 507 agent_host_ = NULL; |
508 delegate_->InspectedContentsClosing(); | 508 delegate_->InspectedContentsClosing(); |
509 } | 509 } |
510 | 510 |
511 void DevToolsUIBindings::SendMessageAck(int request_id, | 511 void DevToolsUIBindings::SendMessageAck(int request_id, |
512 const base::Value* arg) { | 512 const base::Value* arg) { |
513 base::FundamentalValue id_value(request_id); | 513 base::Value id_value(request_id); |
514 CallClientFunction("DevToolsAPI.embedderMessageAck", | 514 CallClientFunction("DevToolsAPI.embedderMessageAck", |
515 &id_value, arg, nullptr); | 515 &id_value, arg, nullptr); |
516 } | 516 } |
517 | 517 |
518 // DevToolsEmbedderMessageDispatcher::Delegate implementation ----------------- | 518 // DevToolsEmbedderMessageDispatcher::Delegate implementation ----------------- |
519 | 519 |
520 void DevToolsUIBindings::ActivateWindow() { | 520 void DevToolsUIBindings::ActivateWindow() { |
521 delegate_->ActivateWindow(); | 521 delegate_->ActivateWindow(); |
522 } | 522 } |
523 | 523 |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 std::string value; | 939 std::string value; |
940 while (rh && rh->EnumerateHeaderLines(&iterator, &name, &value)) | 940 while (rh && rh->EnumerateHeaderLines(&iterator, &name, &value)) |
941 headers->SetString(name, value); | 941 headers->SetString(name, value); |
942 | 942 |
943 it->second.Run(&response); | 943 it->second.Run(&response); |
944 pending_requests_.erase(it); | 944 pending_requests_.erase(it); |
945 delete source; | 945 delete source; |
946 } | 946 } |
947 | 947 |
948 void DevToolsUIBindings::DeviceCountChanged(int count) { | 948 void DevToolsUIBindings::DeviceCountChanged(int count) { |
949 base::FundamentalValue value(count); | 949 base::Value value(count); |
950 CallClientFunction("DevToolsAPI.deviceCountUpdated", &value, NULL, | 950 CallClientFunction("DevToolsAPI.deviceCountUpdated", &value, NULL, |
951 NULL); | 951 NULL); |
952 } | 952 } |
953 | 953 |
954 void DevToolsUIBindings::DevicesUpdated( | 954 void DevToolsUIBindings::DevicesUpdated( |
955 const std::string& source, | 955 const std::string& source, |
956 const base::ListValue& targets) { | 956 const base::ListValue& targets) { |
957 CallClientFunction("DevToolsAPI.devicesUpdated", &targets, NULL, | 957 CallClientFunction("DevToolsAPI.devicesUpdated", &targets, NULL, |
958 NULL); | 958 NULL); |
959 } | 959 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 | 1004 |
1005 CallClientFunction("DevToolsAPI.fileSystemFilesChanged", | 1005 CallClientFunction("DevToolsAPI.fileSystemFilesChanged", |
1006 &list, NULL, NULL); | 1006 &list, NULL, NULL); |
1007 } | 1007 } |
1008 | 1008 |
1009 void DevToolsUIBindings::IndexingTotalWorkCalculated( | 1009 void DevToolsUIBindings::IndexingTotalWorkCalculated( |
1010 int request_id, | 1010 int request_id, |
1011 const std::string& file_system_path, | 1011 const std::string& file_system_path, |
1012 int total_work) { | 1012 int total_work) { |
1013 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1013 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1014 base::FundamentalValue request_id_value(request_id); | 1014 base::Value request_id_value(request_id); |
1015 base::StringValue file_system_path_value(file_system_path); | 1015 base::StringValue file_system_path_value(file_system_path); |
1016 base::FundamentalValue total_work_value(total_work); | 1016 base::Value total_work_value(total_work); |
1017 CallClientFunction("DevToolsAPI.indexingTotalWorkCalculated", | 1017 CallClientFunction("DevToolsAPI.indexingTotalWorkCalculated", |
1018 &request_id_value, &file_system_path_value, | 1018 &request_id_value, &file_system_path_value, |
1019 &total_work_value); | 1019 &total_work_value); |
1020 } | 1020 } |
1021 | 1021 |
1022 void DevToolsUIBindings::IndexingWorked(int request_id, | 1022 void DevToolsUIBindings::IndexingWorked(int request_id, |
1023 const std::string& file_system_path, | 1023 const std::string& file_system_path, |
1024 int worked) { | 1024 int worked) { |
1025 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1025 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1026 base::FundamentalValue request_id_value(request_id); | 1026 base::Value request_id_value(request_id); |
1027 base::StringValue file_system_path_value(file_system_path); | 1027 base::StringValue file_system_path_value(file_system_path); |
1028 base::FundamentalValue worked_value(worked); | 1028 base::Value worked_value(worked); |
1029 CallClientFunction("DevToolsAPI.indexingWorked", &request_id_value, | 1029 CallClientFunction("DevToolsAPI.indexingWorked", &request_id_value, |
1030 &file_system_path_value, &worked_value); | 1030 &file_system_path_value, &worked_value); |
1031 } | 1031 } |
1032 | 1032 |
1033 void DevToolsUIBindings::IndexingDone(int request_id, | 1033 void DevToolsUIBindings::IndexingDone(int request_id, |
1034 const std::string& file_system_path) { | 1034 const std::string& file_system_path) { |
1035 indexing_jobs_.erase(request_id); | 1035 indexing_jobs_.erase(request_id); |
1036 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1036 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1037 base::FundamentalValue request_id_value(request_id); | 1037 base::Value request_id_value(request_id); |
1038 base::StringValue file_system_path_value(file_system_path); | 1038 base::StringValue file_system_path_value(file_system_path); |
1039 CallClientFunction("DevToolsAPI.indexingDone", &request_id_value, | 1039 CallClientFunction("DevToolsAPI.indexingDone", &request_id_value, |
1040 &file_system_path_value, NULL); | 1040 &file_system_path_value, NULL); |
1041 } | 1041 } |
1042 | 1042 |
1043 void DevToolsUIBindings::SearchCompleted( | 1043 void DevToolsUIBindings::SearchCompleted( |
1044 int request_id, | 1044 int request_id, |
1045 const std::string& file_system_path, | 1045 const std::string& file_system_path, |
1046 const std::vector<std::string>& file_paths) { | 1046 const std::vector<std::string>& file_paths) { |
1047 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1047 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1048 base::ListValue file_paths_value; | 1048 base::ListValue file_paths_value; |
1049 for (std::vector<std::string>::const_iterator it(file_paths.begin()); | 1049 for (std::vector<std::string>::const_iterator it(file_paths.begin()); |
1050 it != file_paths.end(); ++it) { | 1050 it != file_paths.end(); ++it) { |
1051 file_paths_value.AppendString(*it); | 1051 file_paths_value.AppendString(*it); |
1052 } | 1052 } |
1053 base::FundamentalValue request_id_value(request_id); | 1053 base::Value request_id_value(request_id); |
1054 base::StringValue file_system_path_value(file_system_path); | 1054 base::StringValue file_system_path_value(file_system_path); |
1055 CallClientFunction("DevToolsAPI.searchCompleted", &request_id_value, | 1055 CallClientFunction("DevToolsAPI.searchCompleted", &request_id_value, |
1056 &file_system_path_value, &file_paths_value); | 1056 &file_system_path_value, &file_paths_value); |
1057 } | 1057 } |
1058 | 1058 |
1059 void DevToolsUIBindings::ShowDevToolsConfirmInfoBar( | 1059 void DevToolsUIBindings::ShowDevToolsConfirmInfoBar( |
1060 const base::string16& message, | 1060 const base::string16& message, |
1061 const InfoBarCallback& callback) { | 1061 const InfoBarCallback& callback) { |
1062 if (!delegate_->GetInfoBarService()) { | 1062 if (!delegate_->GetInfoBarService()) { |
1063 callback.Run(false); | 1063 callback.Run(false); |
(...skipping 17 matching lines...) Expand all Loading... |
1081 .is_empty()) | 1081 .is_empty()) |
1082 continue; | 1082 continue; |
1083 std::unique_ptr<base::DictionaryValue> extension_info( | 1083 std::unique_ptr<base::DictionaryValue> extension_info( |
1084 new base::DictionaryValue()); | 1084 new base::DictionaryValue()); |
1085 extension_info->Set( | 1085 extension_info->Set( |
1086 "startPage", | 1086 "startPage", |
1087 new base::StringValue(extensions::chrome_manifest_urls::GetDevToolsPage( | 1087 new base::StringValue(extensions::chrome_manifest_urls::GetDevToolsPage( |
1088 extension.get()).spec())); | 1088 extension.get()).spec())); |
1089 extension_info->Set("name", new base::StringValue(extension->name())); | 1089 extension_info->Set("name", new base::StringValue(extension->name())); |
1090 extension_info->Set("exposeExperimentalAPIs", | 1090 extension_info->Set("exposeExperimentalAPIs", |
1091 new base::FundamentalValue( | 1091 new base::Value( |
1092 extension->permissions_data()->HasAPIPermission( | 1092 extension->permissions_data()->HasAPIPermission( |
1093 extensions::APIPermission::kExperimental))); | 1093 extensions::APIPermission::kExperimental))); |
1094 results.Append(std::move(extension_info)); | 1094 results.Append(std::move(extension_info)); |
1095 } | 1095 } |
1096 if (!results.empty()) { | 1096 if (!results.empty()) { |
1097 // At least one devtools extension exists; it will need to run in the | 1097 // At least one devtools extension exists; it will need to run in the |
1098 // devtools process. Grant it permission to load documents with | 1098 // devtools process. Grant it permission to load documents with |
1099 // chrome-extension:// origins. | 1099 // chrome-extension:// origins. |
1100 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( | 1100 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( |
1101 web_contents_->GetMainFrame()->GetProcess()->GetID(), | 1101 web_contents_->GetMainFrame()->GetProcess()->GetID(), |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1186 void DevToolsUIBindings::FrontendLoaded() { | 1186 void DevToolsUIBindings::FrontendLoaded() { |
1187 if (frontend_loaded_) | 1187 if (frontend_loaded_) |
1188 return; | 1188 return; |
1189 frontend_loaded_ = true; | 1189 frontend_loaded_ = true; |
1190 | 1190 |
1191 // Call delegate first - it seeds importants bit of information. | 1191 // Call delegate first - it seeds importants bit of information. |
1192 delegate_->OnLoadCompleted(); | 1192 delegate_->OnLoadCompleted(); |
1193 | 1193 |
1194 AddDevToolsExtensionsToClient(); | 1194 AddDevToolsExtensionsToClient(); |
1195 } | 1195 } |
OLD | NEW |