feat: support css origin in frame.insertCSS (#19268)

* feat: support css origin in frame.insertCSS

* move cssOrigin to an options object
This commit is contained in:
Shelley Vohr 2019-07-17 14:34:05 -07:00 committed by GitHub
parent e510816cf6
commit 3ee95cf0e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 6 deletions

View file

@ -987,13 +987,13 @@ Returns `String` - The user agent for this web page.
**[Deprecated](modernization/property-updates.md)**
#### `contents.insertCSS(css)`
#### `contents.insertCSS(css[, options])`
* `css` String
* `options` Object (optional)
* `cssOrigin` String (optional) - Can be either 'user' or 'author'; Specifying 'user' enables you to prevent websites from overriding the CSS you insert. Default is 'author'.
Returns `Promise<String>` - A promise that resolves with a key for the inserted
CSS that can later be used to remove the CSS via
`contents.removeInsertedCSS(key)`.
Returns `Promise<String>` - A promise that resolves with a key for the inserted CSS that can later be used to remove the CSS via `contents.removeInsertedCSS(key)`.
Injects CSS into the current web page and returns a unique key for the inserted
stylesheet.

View file

@ -61,6 +61,25 @@ struct Converter<blink::WebLocalFrame::ScriptExecutionType> {
}
};
template <>
struct Converter<blink::WebDocument::CSSOrigin> {
static bool FromV8(v8::Isolate* isolate,
v8::Local<v8::Value> val,
blink::WebDocument::CSSOrigin* out) {
std::string css_origin;
if (!ConvertFromV8(isolate, val, &css_origin))
return false;
if (css_origin == "user") {
*out = blink::WebDocument::CSSOrigin::kUserOrigin;
} else if (css_origin == "author") {
*out = blink::WebDocument::CSSOrigin::kAuthorOrigin;
} else {
return false;
}
return true;
}
};
} // namespace mate
namespace electron {
@ -325,12 +344,21 @@ void InsertText(v8::Local<v8::Value> window, const std::string& text) {
}
}
base::string16 InsertCSS(v8::Local<v8::Value> window, const std::string& css) {
base::string16 InsertCSS(v8::Local<v8::Value> window,
const std::string& css,
mate::Arguments* args) {
blink::WebDocument::CSSOrigin css_origin =
blink::WebDocument::CSSOrigin::kAuthorOrigin;
mate::Dictionary options;
if (args->GetNext(&options))
options.Get("cssOrigin", &css_origin);
blink::WebFrame* web_frame = GetRenderFrame(window)->GetWebFrame();
if (web_frame->IsWebLocalFrame()) {
return web_frame->ToWebLocalFrame()
->GetDocument()
.InsertStyleSheet(blink::WebString::FromUTF8(css))
.InsertStyleSheet(blink::WebString::FromUTF8(css), nullptr, css_origin)
.Utf16();
}
return base::string16();