add open devtools api to webview tag

This commit is contained in:
gray 2014-11-02 06:34:22 -08:00
parent 5e99c8f280
commit 368d23ef5b
3 changed files with 47 additions and 2 deletions

View file

@ -10,6 +10,9 @@
#include "atom/common/native_mate_converters/gurl_converter.h" #include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h" #include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/common/native_mate_converters/value_converter.h" #include "atom/common/native_mate_converters/value_converter.h"
#include "atom/browser/atom_javascript_dialog_manager.h"
#include "brightray/browser/inspectable_web_contents.h"
#include "brightray/browser/inspectable_web_contents_view.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
@ -37,7 +40,8 @@ WebContents::WebContents(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents), : content::WebContentsObserver(web_contents),
guest_instance_id_(-1), guest_instance_id_(-1),
guest_opaque_(true), guest_opaque_(true),
auto_size_enabled_(false) { auto_size_enabled_(false)
{
} }
WebContents::WebContents(const mate::Dictionary& options) WebContents::WebContents(const mate::Dictionary& options)
@ -58,6 +62,9 @@ WebContents::WebContents(const mate::Dictionary& options)
storage_.reset(content::WebContents::Create(params)); storage_.reset(content::WebContents::Create(params));
storage_->SetDelegate(this); storage_->SetDelegate(this);
Observe(storage_.get()); Observe(storage_.get());
inspectable_web_contents_.reset(brightray::InspectableWebContents::Create(storage_.get()));
// inspectable_web_contents()->SetDelegate(this);
} }
WebContents::~WebContents() { WebContents::~WebContents() {
@ -368,6 +375,10 @@ void WebContents::ExecuteJavaScript(const base::string16& code) {
web_contents()->GetMainFrame()->ExecuteJavaScript(code); web_contents()->GetMainFrame()->ExecuteJavaScript(code);
} }
void WebContents::OpenDevTools() {
inspectable_web_contents()->ShowDevTools();
}
bool WebContents::SendIPCMessage(const base::string16& channel, bool WebContents::SendIPCMessage(const base::string16& channel,
const base::ListValue& args) { const base::ListValue& args) {
return Send(new AtomViewMsg_Message(routing_id(), channel, args)); return Send(new AtomViewMsg_Message(routing_id(), channel, args));
@ -442,6 +453,7 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("setAutoSize", &WebContents::SetAutoSize) .SetMethod("setAutoSize", &WebContents::SetAutoSize)
.SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency) .SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency)
.SetMethod("isGuest", &WebContents::is_guest) .SetMethod("isGuest", &WebContents::is_guest)
.SetMethod("openDevTools", &WebContents::OpenDevTools)
.Build()); .Build());
return mate::ObjectTemplateBuilder( return mate::ObjectTemplateBuilder(

View file

@ -11,20 +11,32 @@
#include "content/public/browser/browser_plugin_guest_delegate.h" #include "content/public/browser/browser_plugin_guest_delegate.h"
#include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_observer.h"
#include "brightray/browser/default_web_contents_delegate.h"
#include "brightray/browser/inspectable_web_contents_delegate.h"
#include "brightray/browser/inspectable_web_contents_impl.h"
#include "native_mate/handle.h" #include "native_mate/handle.h"
namespace mate { namespace mate {
class Dictionary; class Dictionary;
} }
namespace brightray
{
class InspectableWebContents;
class InspectableWebContentsImpl;
}
namespace atom { namespace atom {
class AtomJavaScriptDialogManager;
namespace api { namespace api {
class WebContents : public mate::EventEmitter, class WebContents : public mate::EventEmitter,
public content::BrowserPluginGuestDelegate, public content::BrowserPluginGuestDelegate,
public content::WebContentsDelegate, public content::WebContentsDelegate,
public content::WebContentsObserver { public content::WebContentsObserver {
// public brightray::InspectableWebContentsDelegate {
public: public:
// Create from an existing WebContents. // Create from an existing WebContents.
static mate::Handle<WebContents> CreateFrom( static mate::Handle<WebContents> CreateFrom(
@ -57,6 +69,7 @@ class WebContents : public mate::EventEmitter,
void SetUserAgent(const std::string& user_agent); void SetUserAgent(const std::string& user_agent);
void InsertCSS(const std::string& css); void InsertCSS(const std::string& css);
void ExecuteJavaScript(const base::string16& code); void ExecuteJavaScript(const base::string16& code);
void OpenDevTools();
bool SendIPCMessage(const base::string16& channel, bool SendIPCMessage(const base::string16& channel,
const base::ListValue& args); const base::ListValue& args);
@ -83,6 +96,18 @@ class WebContents : public mate::EventEmitter,
explicit WebContents(const mate::Dictionary& options); explicit WebContents(const mate::Dictionary& options);
~WebContents(); ~WebContents();
brightray::InspectableWebContentsImpl* inspectable_web_contents() const {
return static_cast<brightray::InspectableWebContentsImpl*>(
inspectable_web_contents_.get());
}
// Devtools
/* void DevToolsSaveToFile(const std::string& url,
const std::string& content,
bool save_as) override;
void DevToolsAppendToFile(const std::string& url,
const std::string& content) override; */
// mate::Wrappable: // mate::Wrappable:
virtual mate::ObjectTemplateBuilder GetObjectTemplateBuilder( virtual mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override; v8::Isolate* isolate) override;
@ -180,6 +205,13 @@ class WebContents : public mate::EventEmitter,
// The WebContents that attaches this guest view. // The WebContents that attaches this guest view.
content::WebContents* embedder_web_contents_; content::WebContents* embedder_web_contents_;
scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_;
// Notice that inspectable_web_contents_ must be placed after dialog_manager_,
// so we can make sure inspectable_web_contents_ is destroyed before
// dialog_manager_, otherwise a crash would happen.
scoped_ptr<brightray::InspectableWebContents> inspectable_web_contents_;
// The size of the container element. // The size of the container element.
gfx::Size element_size_; gfx::Size element_size_;

View file

@ -517,7 +517,8 @@ registerWebViewElement = ->
"isCrashed" "isCrashed"
"setUserAgent" "setUserAgent"
"executeJavaScript" "executeJavaScript"
"insertCSS" "insertCSS",
"openDevTools",
"send" "send"
] ]