| OLD | NEW |
| 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 "content/browser/devtools/devtools_http_handler_impl.h" | 5 #include "content/browser/devtools/devtools_http_handler_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 } | 185 } |
| 186 | 186 |
| 187 DevToolsHttpHandlerImpl::~DevToolsHttpHandlerImpl() { | 187 DevToolsHttpHandlerImpl::~DevToolsHttpHandlerImpl() { |
| 188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 189 // Stop() must be called prior to destruction. | 189 // Stop() must be called prior to destruction. |
| 190 DCHECK(server_.get() == NULL); | 190 DCHECK(server_.get() == NULL); |
| 191 DCHECK(thread_.get() == NULL); | 191 DCHECK(thread_.get() == NULL); |
| 192 } | 192 } |
| 193 | 193 |
| 194 void DevToolsHttpHandlerImpl::Start() { | 194 void DevToolsHttpHandlerImpl::Start() { |
| 195 if (thread_.get()) | 195 if (thread_) |
| 196 return; | 196 return; |
| 197 thread_.reset(new base::Thread(kDevToolsHandlerThreadName)); | 197 thread_.reset(new base::Thread(kDevToolsHandlerThreadName)); |
| 198 BrowserThread::PostTask( | 198 BrowserThread::PostTask( |
| 199 BrowserThread::FILE, FROM_HERE, | 199 BrowserThread::FILE, FROM_HERE, |
| 200 base::Bind(&DevToolsHttpHandlerImpl::StartHandlerThread, this)); | 200 base::Bind(&DevToolsHttpHandlerImpl::StartHandlerThread, this)); |
| 201 } | 201 } |
| 202 | 202 |
| 203 // Runs on FILE thread. | 203 // Runs on FILE thread. |
| 204 void DevToolsHttpHandlerImpl::StartHandlerThread() { | 204 void DevToolsHttpHandlerImpl::StartHandlerThread() { |
| 205 base::Thread::Options options; | 205 base::Thread::Options options; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 219 void DevToolsHttpHandlerImpl::ResetHandlerThread() { | 219 void DevToolsHttpHandlerImpl::ResetHandlerThread() { |
| 220 thread_.reset(); | 220 thread_.reset(); |
| 221 } | 221 } |
| 222 | 222 |
| 223 void DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease() { | 223 void DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease() { |
| 224 ResetHandlerThread(); | 224 ResetHandlerThread(); |
| 225 Release(); | 225 Release(); |
| 226 } | 226 } |
| 227 | 227 |
| 228 void DevToolsHttpHandlerImpl::Stop() { | 228 void DevToolsHttpHandlerImpl::Stop() { |
| 229 if (!thread_.get()) | 229 if (!thread_) |
| 230 return; | 230 return; |
| 231 BrowserThread::PostTaskAndReply( | 231 BrowserThread::PostTaskAndReply( |
| 232 BrowserThread::FILE, FROM_HERE, | 232 BrowserThread::FILE, FROM_HERE, |
| 233 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), | 233 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), |
| 234 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease, this)); | 234 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease, this)); |
| 235 } | 235 } |
| 236 | 236 |
| 237 void DevToolsHttpHandlerImpl::SetDevToolsAgentHostBinding( | 237 void DevToolsHttpHandlerImpl::SetDevToolsAgentHostBinding( |
| 238 DevToolsAgentHostBinding* binding) { | 238 DevToolsAgentHostBinding* binding) { |
| 239 if (binding) | 239 if (binding) |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 } | 599 } |
| 600 | 600 |
| 601 void DevToolsHttpHandlerImpl::OnDiscoveryPageRequestUI(int connection_id) { | 601 void DevToolsHttpHandlerImpl::OnDiscoveryPageRequestUI(int connection_id) { |
| 602 std::string response = delegate_->GetDiscoveryPageHTML(); | 602 std::string response = delegate_->GetDiscoveryPageHTML(); |
| 603 Send200(connection_id, response, "text/html; charset=UTF-8"); | 603 Send200(connection_id, response, "text/html; charset=UTF-8"); |
| 604 } | 604 } |
| 605 | 605 |
| 606 void DevToolsHttpHandlerImpl::OnWebSocketRequestUI( | 606 void DevToolsHttpHandlerImpl::OnWebSocketRequestUI( |
| 607 int connection_id, | 607 int connection_id, |
| 608 const net::HttpServerRequestInfo& request) { | 608 const net::HttpServerRequestInfo& request) { |
| 609 if (!thread_.get()) | 609 if (!thread_) |
| 610 return; | 610 return; |
| 611 std::string browser_prefix = "/devtools/browser"; | 611 std::string browser_prefix = "/devtools/browser"; |
| 612 size_t browser_pos = request.path.find(browser_prefix); | 612 size_t browser_pos = request.path.find(browser_prefix); |
| 613 if (browser_pos == 0) { | 613 if (browser_pos == 0) { |
| 614 if (browser_target_) { | 614 if (browser_target_) { |
| 615 Send500(connection_id, "Another client already attached"); | 615 Send500(connection_id, "Another client already attached"); |
| 616 return; | 616 return; |
| 617 } | 617 } |
| 618 browser_target_.reset(new DevToolsBrowserTarget( | 618 browser_target_.reset(new DevToolsBrowserTarget( |
| 619 thread_->message_loop_proxy().get(), server_.get(), connection_id)); | 619 thread_->message_loop_proxy().get(), server_.get(), connection_id)); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 FROM_HERE, | 732 FROM_HERE, |
| 733 base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); | 733 base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); |
| 734 // Thread::Stop joins the thread. | 734 // Thread::Stop joins the thread. |
| 735 thread_->Stop(); | 735 thread_->Stop(); |
| 736 } | 736 } |
| 737 | 737 |
| 738 void DevToolsHttpHandlerImpl::SendJson(int connection_id, | 738 void DevToolsHttpHandlerImpl::SendJson(int connection_id, |
| 739 net::HttpStatusCode status_code, | 739 net::HttpStatusCode status_code, |
| 740 base::Value* value, | 740 base::Value* value, |
| 741 const std::string& message) { | 741 const std::string& message) { |
| 742 if (!thread_.get()) | 742 if (!thread_) |
| 743 return; | 743 return; |
| 744 | 744 |
| 745 // Serialize value and message. | 745 // Serialize value and message. |
| 746 std::string json_value; | 746 std::string json_value; |
| 747 if (value) { | 747 if (value) { |
| 748 base::JSONWriter::WriteWithOptions(value, | 748 base::JSONWriter::WriteWithOptions(value, |
| 749 base::JSONWriter::OPTIONS_PRETTY_PRINT, | 749 base::JSONWriter::OPTIONS_PRETTY_PRINT, |
| 750 &json_value); | 750 &json_value); |
| 751 } | 751 } |
| 752 std::string json_message; | 752 std::string json_message; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 764 server_.get(), | 764 server_.get(), |
| 765 connection_id, | 765 connection_id, |
| 766 status_code, | 766 status_code, |
| 767 response, | 767 response, |
| 768 mime_type)); | 768 mime_type)); |
| 769 } | 769 } |
| 770 | 770 |
| 771 void DevToolsHttpHandlerImpl::Send200(int connection_id, | 771 void DevToolsHttpHandlerImpl::Send200(int connection_id, |
| 772 const std::string& data, | 772 const std::string& data, |
| 773 const std::string& mime_type) { | 773 const std::string& mime_type) { |
| 774 if (!thread_.get()) | 774 if (!thread_) |
| 775 return; | 775 return; |
| 776 thread_->message_loop()->PostTask( | 776 thread_->message_loop()->PostTask( |
| 777 FROM_HERE, | 777 FROM_HERE, |
| 778 base::Bind(&net::HttpServer::Send200, | 778 base::Bind(&net::HttpServer::Send200, |
| 779 server_.get(), | 779 server_.get(), |
| 780 connection_id, | 780 connection_id, |
| 781 data, | 781 data, |
| 782 mime_type)); | 782 mime_type)); |
| 783 } | 783 } |
| 784 | 784 |
| 785 void DevToolsHttpHandlerImpl::Send404(int connection_id) { | 785 void DevToolsHttpHandlerImpl::Send404(int connection_id) { |
| 786 if (!thread_.get()) | 786 if (!thread_) |
| 787 return; | 787 return; |
| 788 thread_->message_loop()->PostTask( | 788 thread_->message_loop()->PostTask( |
| 789 FROM_HERE, | 789 FROM_HERE, |
| 790 base::Bind(&net::HttpServer::Send404, server_.get(), connection_id)); | 790 base::Bind(&net::HttpServer::Send404, server_.get(), connection_id)); |
| 791 } | 791 } |
| 792 | 792 |
| 793 void DevToolsHttpHandlerImpl::Send500(int connection_id, | 793 void DevToolsHttpHandlerImpl::Send500(int connection_id, |
| 794 const std::string& message) { | 794 const std::string& message) { |
| 795 if (!thread_.get()) | 795 if (!thread_) |
| 796 return; | 796 return; |
| 797 thread_->message_loop()->PostTask( | 797 thread_->message_loop()->PostTask( |
| 798 FROM_HERE, | 798 FROM_HERE, |
| 799 base::Bind(&net::HttpServer::Send500, server_.get(), connection_id, | 799 base::Bind(&net::HttpServer::Send500, server_.get(), connection_id, |
| 800 message)); | 800 message)); |
| 801 } | 801 } |
| 802 | 802 |
| 803 void DevToolsHttpHandlerImpl::AcceptWebSocket( | 803 void DevToolsHttpHandlerImpl::AcceptWebSocket( |
| 804 int connection_id, | 804 int connection_id, |
| 805 const net::HttpServerRequestInfo& request) { | 805 const net::HttpServerRequestInfo& request) { |
| 806 if (!thread_.get()) | 806 if (!thread_) |
| 807 return; | 807 return; |
| 808 thread_->message_loop()->PostTask( | 808 thread_->message_loop()->PostTask( |
| 809 FROM_HERE, | 809 FROM_HERE, |
| 810 base::Bind(&net::HttpServer::AcceptWebSocket, server_.get(), | 810 base::Bind(&net::HttpServer::AcceptWebSocket, server_.get(), |
| 811 connection_id, request)); | 811 connection_id, request)); |
| 812 } | 812 } |
| 813 | 813 |
| 814 base::DictionaryValue* DevToolsHttpHandlerImpl::SerializePageInfo( | 814 base::DictionaryValue* DevToolsHttpHandlerImpl::SerializePageInfo( |
| 815 RenderViewHost* rvh, | 815 RenderViewHost* rvh, |
| 816 const std::string& host) { | 816 const std::string& host) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 host.c_str(), | 885 host.c_str(), |
| 886 kPageUrlPrefix, | 886 kPageUrlPrefix, |
| 887 id.c_str())); | 887 id.c_str())); |
| 888 std::string devtools_frontend_url = GetFrontendURLInternal( | 888 std::string devtools_frontend_url = GetFrontendURLInternal( |
| 889 id.c_str(), | 889 id.c_str(), |
| 890 host); | 890 host); |
| 891 dictionary->SetString(kTargetDevtoolsFrontendUrlField, devtools_frontend_url); | 891 dictionary->SetString(kTargetDevtoolsFrontendUrlField, devtools_frontend_url); |
| 892 } | 892 } |
| 893 | 893 |
| 894 } // namespace content | 894 } // namespace content |
| OLD | NEW |