2014-10-31 18:17:05 +00:00
|
|
|
// Copyright (c) 2014 GitHub, Inc.
|
2014-10-24 10:24:12 +00:00
|
|
|
// Use of this source code is governed by the MIT license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
|
|
|
#include "atom/renderer/api/atom_api_web_frame.h"
|
|
|
|
|
2015-01-08 20:37:41 +00:00
|
|
|
// This defines are required by SchemeRegistry.h.
|
2015-01-08 20:51:15 +00:00
|
|
|
#define OS(WTF_FEATURE) (defined WTF_OS_##WTF_FEATURE && WTF_OS_##WTF_FEATURE) // NOLINT
|
|
|
|
#define USE(WTF_FEATURE) (defined WTF_USE_##WTF_FEATURE && WTF_USE_##WTF_FEATURE) // NOLINT
|
|
|
|
#define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE) // NOLINT
|
2015-01-08 20:37:41 +00:00
|
|
|
|
2014-10-24 10:24:12 +00:00
|
|
|
#include "atom/common/native_mate_converters/string16_converter.h"
|
2014-12-18 21:54:01 +00:00
|
|
|
#include "atom/renderer/api/atom_api_spell_check_client.h"
|
2014-12-08 16:05:34 +00:00
|
|
|
#include "content/public/renderer/render_frame.h"
|
2014-10-24 10:24:12 +00:00
|
|
|
#include "native_mate/dictionary.h"
|
|
|
|
#include "native_mate/object_template_builder.h"
|
|
|
|
#include "third_party/WebKit/public/web/WebDocument.h"
|
|
|
|
#include "third_party/WebKit/public/web/WebLocalFrame.h"
|
|
|
|
#include "third_party/WebKit/public/web/WebView.h"
|
2015-01-08 20:37:41 +00:00
|
|
|
#include "third_party/WebKit/Source/platform/weborigin/SchemeRegistry.h"
|
2014-10-24 10:24:12 +00:00
|
|
|
|
|
|
|
#include "atom/common/node_includes.h"
|
|
|
|
|
2015-01-08 20:37:41 +00:00
|
|
|
namespace mate {
|
|
|
|
|
|
|
|
template<>
|
|
|
|
struct Converter<WTF::String> {
|
|
|
|
static bool FromV8(v8::Isolate* isolate,
|
|
|
|
v8::Handle<v8::Value> val,
|
|
|
|
WTF::String* out) {
|
|
|
|
if (!val->IsString())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
v8::String::Value s(val);
|
|
|
|
*out = WTF::String(reinterpret_cast<const base::char16*>(*s), s.length());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace mate
|
|
|
|
|
2014-10-24 10:24:12 +00:00
|
|
|
namespace atom {
|
|
|
|
|
|
|
|
namespace api {
|
|
|
|
|
|
|
|
WebFrame::WebFrame()
|
|
|
|
: web_frame_(blink::WebLocalFrame::frameForCurrentContext()) {
|
|
|
|
}
|
|
|
|
|
|
|
|
WebFrame::~WebFrame() {
|
|
|
|
}
|
|
|
|
|
2014-10-24 10:44:15 +00:00
|
|
|
void WebFrame::SetName(const std::string& name) {
|
|
|
|
web_frame_->setName(blink::WebString::fromUTF8(name));
|
|
|
|
}
|
|
|
|
|
2014-10-24 10:24:12 +00:00
|
|
|
double WebFrame::SetZoomLevel(double level) {
|
|
|
|
return web_frame_->view()->setZoomLevel(level);
|
|
|
|
}
|
|
|
|
|
|
|
|
double WebFrame::GetZoomLevel() const {
|
|
|
|
return web_frame_->view()->zoomLevel();
|
|
|
|
}
|
|
|
|
|
|
|
|
double WebFrame::SetZoomFactor(double factor) {
|
|
|
|
return blink::WebView::zoomLevelToZoomFactor(SetZoomLevel(
|
|
|
|
blink::WebView::zoomFactorToZoomLevel(factor)));
|
|
|
|
}
|
|
|
|
|
|
|
|
double WebFrame::GetZoomFactor() const {
|
|
|
|
return blink::WebView::zoomLevelToZoomFactor(GetZoomLevel());
|
|
|
|
}
|
|
|
|
|
|
|
|
v8::Handle<v8::Value> WebFrame::RegisterEmbedderCustomElement(
|
|
|
|
const base::string16& name, v8::Handle<v8::Object> options) {
|
|
|
|
blink::WebExceptionCode c = 0;
|
|
|
|
return web_frame_->document().registerEmbedderCustomElement(name, options, c);
|
|
|
|
}
|
|
|
|
|
2014-12-08 16:05:34 +00:00
|
|
|
void WebFrame::AttachGuest(int id) {
|
|
|
|
content::RenderFrame::FromWebFrame(web_frame_)->AttachGuest(id);
|
|
|
|
}
|
|
|
|
|
2014-12-20 04:42:19 +00:00
|
|
|
void WebFrame::SetSpellCheckProvider(mate::Arguments* args,
|
|
|
|
const std::string& language,
|
2014-12-20 05:01:47 +00:00
|
|
|
bool auto_spell_correct_turned_on,
|
2014-12-18 21:54:01 +00:00
|
|
|
v8::Handle<v8::Object> provider) {
|
2014-12-20 05:01:47 +00:00
|
|
|
if (!provider->Has(mate::StringToV8(args->isolate(), "spellCheck"))) {
|
2014-12-20 04:42:19 +00:00
|
|
|
args->ThrowError("\"spellCheck\" has to be defined");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-12-20 05:01:47 +00:00
|
|
|
spell_check_client_.reset(new SpellCheckClient(
|
|
|
|
language, auto_spell_correct_turned_on, args->isolate(), provider));
|
2014-12-19 00:44:38 +00:00
|
|
|
web_frame_->view()->setSpellCheckClient(spell_check_client_.get());
|
2014-12-18 21:54:01 +00:00
|
|
|
}
|
|
|
|
|
2014-10-24 10:24:12 +00:00
|
|
|
mate::ObjectTemplateBuilder WebFrame::GetObjectTemplateBuilder(
|
|
|
|
v8::Isolate* isolate) {
|
|
|
|
return mate::ObjectTemplateBuilder(isolate)
|
2014-10-24 10:44:15 +00:00
|
|
|
.SetMethod("setName", &WebFrame::SetName)
|
2014-10-24 10:24:12 +00:00
|
|
|
.SetMethod("setZoomLevel", &WebFrame::SetZoomLevel)
|
|
|
|
.SetMethod("getZoomLevel", &WebFrame::GetZoomLevel)
|
|
|
|
.SetMethod("setZoomFactor", &WebFrame::SetZoomFactor)
|
|
|
|
.SetMethod("getZoomFactor", &WebFrame::GetZoomFactor)
|
|
|
|
.SetMethod("registerEmbedderCustomElement",
|
2014-12-08 16:05:34 +00:00
|
|
|
&WebFrame::RegisterEmbedderCustomElement)
|
2014-12-18 21:54:01 +00:00
|
|
|
.SetMethod("attachGuest", &WebFrame::AttachGuest)
|
2015-01-08 20:37:41 +00:00
|
|
|
.SetMethod("setSpellCheckProvider", &WebFrame::SetSpellCheckProvider)
|
|
|
|
.SetMethod("registerUrlSchemeAsSecure",
|
|
|
|
&blink::SchemeRegistry::registerURLSchemeAsSecure);
|
2014-10-24 10:24:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// static
|
|
|
|
mate::Handle<WebFrame> WebFrame::Create(v8::Isolate* isolate) {
|
|
|
|
return CreateHandle(isolate, new WebFrame);
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace api
|
|
|
|
|
|
|
|
} // namespace atom
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
|
|
|
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
|
|
|
|
v8::Handle<v8::Context> context, void* priv) {
|
|
|
|
v8::Isolate* isolate = context->GetIsolate();
|
|
|
|
mate::Dictionary dict(isolate, exports);
|
|
|
|
dict.Set("webFrame", atom::api::WebFrame::Create(isolate));
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_renderer_web_frame, Initialize)
|