| Index: android_webview/browser/aw_devtools_delegate.cc
|
| diff --git a/android_webview/browser/aw_devtools_delegate.cc b/android_webview/browser/aw_devtools_delegate.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fcac547d9913418e444f29c124ab335a46139cc8
|
| --- /dev/null
|
| +++ b/android_webview/browser/aw_devtools_delegate.cc
|
| @@ -0,0 +1,120 @@
|
| +// Copyright 2013 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 "android_webview/browser/aw_devtools_delegate.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/stringprintf.h"
|
| +#include "content/public/browser/android/devtools_auth.h"
|
| +#include "content/public/browser/devtools_http_handler.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "content/public/common/url_constants.h"
|
| +#include "net/base/unix_domain_socket_posix.h"
|
| +#include "ui/base/resource/resource_bundle.h"
|
| +
|
| +namespace {
|
| +const char kSocketNameFormat[] = "webview_devtools_remote_%d";
|
| +}
|
| +
|
| +namespace android_webview {
|
| +
|
| +AwDevToolsDelegate::AwDevToolsDelegate(content::BrowserContext* browser_context)
|
| + : browser_context_(browser_context) {
|
| + devtools_http_handler_ = content::DevToolsHttpHandler::Start(
|
| + new net::UnixDomainSocketWithAbstractNamespaceFactory(
|
| + StringPrintf(kSocketNameFormat, getpid()),
|
| + base::Bind(&content::CanUserConnectToDevTools)),
|
| + "",
|
| + this);
|
| +}
|
| +
|
| +AwDevToolsDelegate::~AwDevToolsDelegate() {
|
| +}
|
| +
|
| +void AwDevToolsDelegate::Stop() {
|
| + // The HTTP handler will delete our instance.
|
| + devtools_http_handler_->Stop();
|
| +}
|
| +
|
| +std::string AwDevToolsDelegate::GetDiscoveryPageHTML() {
|
| + // This is a temporary way of providing the list of inspectable WebViews.
|
| + // Since WebView doesn't have its own resources now, it doesn't seem
|
| + // reasonable to create a dedicated .pak file just for this temporary page.
|
| + const char html[] =
|
| + "<html>"
|
| + "<head>"
|
| + "<title>WebView remote debugging</title>"
|
| + "<style>"
|
| + "</style>"
|
| + "<script>"
|
| + "function onLoad() {"
|
| + " var tabs_list_request = new XMLHttpRequest();"
|
| + " tabs_list_request.open("
|
| + "\"GET\", \"/json/list?t=\" + new Date().getTime(), true);"
|
| + " tabs_list_request.onreadystatechange = onReady;"
|
| + " tabs_list_request.send();"
|
| + "}"
|
| + "function onReady() {"
|
| + " if(this.readyState == 4 && this.status == 200) {"
|
| + " if(this.response != null)"
|
| + " var responseJSON = JSON.parse(this.response);"
|
| + " for (var i = 0; i < responseJSON.length; ++i)"
|
| + " appendItem(responseJSON[i]);"
|
| + " }"
|
| + "}"
|
| + "function appendItem(item_object) {"
|
| + " var frontend_ref;"
|
| + " if (item_object.devtoolsFrontendUrl) {"
|
| + " frontend_ref = document.createElement(\"a\");"
|
| + " frontend_ref.href = item_object.devtoolsFrontendUrl;"
|
| + " frontend_ref.title = item_object.title;"
|
| + " } else {"
|
| + " frontend_ref = document.createElement(\"div\");"
|
| + " frontend_ref.title = "
|
| + "\"The view already has active debugging session\";"
|
| + " }"
|
| + " var text = document.createElement(\"div\");"
|
| + " if (item_object.title)"
|
| + " text.innerText = item_object.title;"
|
| + " else"
|
| + " text.innerText = \"(untitled tab)\";"
|
| + " text.style.cssText = "
|
| + "\"background-image:url(\" + item_object.faviconUrl + \")\";"
|
| + " frontend_ref.appendChild(text);"
|
| + " var item = document.createElement(\"p\");"
|
| + " item.appendChild(frontend_ref);"
|
| + " document.getElementById(\"items\").appendChild(item);"
|
| + "}"
|
| + "</script>"
|
| + "</head>"
|
| + "<body onload='onLoad()'>"
|
| + " <div id='caption'>Inspectable WebViews</div>"
|
| + " <div id='items'></div>"
|
| + "</body>"
|
| + "</html>";
|
| + return html;
|
| +}
|
| +
|
| +bool AwDevToolsDelegate::BundlesFrontendResources() {
|
| + return true;
|
| +}
|
| +
|
| +base::FilePath AwDevToolsDelegate::GetDebugFrontendDir() {
|
| + return base::FilePath();
|
| +}
|
| +
|
| +std::string AwDevToolsDelegate::GetPageThumbnailData(const GURL& url) {
|
| + return "";
|
| +}
|
| +
|
| +content::RenderViewHost* AwDevToolsDelegate::CreateNewTarget() {
|
| + return NULL;
|
| +}
|
| +
|
| +content::DevToolsHttpHandlerDelegate::TargetType
|
| +AwDevToolsDelegate::GetTargetType(content::RenderViewHost*) {
|
| + return kTargetTypeTab;
|
| +}
|
| +
|
| +} // namespace android_webview
|
|
|