Be compatible with old BrowserWindow options
This commit is contained in:
parent
5cca947f4d
commit
960d325a58
2 changed files with 52 additions and 4 deletions
|
@ -3,6 +3,7 @@
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "atom/browser/api/atom_api_window.h"
|
#include "atom/browser/api/atom_api_window.h"
|
||||||
|
#include "atom/common/native_mate_converters/value_converter.h"
|
||||||
|
|
||||||
#include "atom/browser/api/atom_api_menu.h"
|
#include "atom/browser/api/atom_api_menu.h"
|
||||||
#include "atom/browser/api/atom_api_web_contents.h"
|
#include "atom/browser/api/atom_api_web_contents.h"
|
||||||
|
@ -60,10 +61,54 @@ void OnCapturePageDone(
|
||||||
callback.Run(gfx::Image::CreateFrom1xBitmap(bitmap));
|
callback.Run(gfx::Image::CreateFrom1xBitmap(bitmap));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert min-width to minWidth recursively in the dictionary.
|
// Converts min-width to minWidth, returns false if no conversion is needed.
|
||||||
|
bool TranslateOldKey(const std::string& key, std::string* new_key) {
|
||||||
|
if (key.find('-') == std::string::npos)
|
||||||
|
return false;
|
||||||
|
new_key->reserve(key.size());
|
||||||
|
bool next_upper_case = false;
|
||||||
|
for (char c : key) {
|
||||||
|
if (c == '-') {
|
||||||
|
next_upper_case = true;
|
||||||
|
} else if (next_upper_case) {
|
||||||
|
new_key->push_back(base::ToUpperASCII(c));
|
||||||
|
next_upper_case = false;
|
||||||
|
} else {
|
||||||
|
new_key->push_back(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Converts min-width to minWidth recursively in the dictionary.
|
||||||
|
void TranslateOldOptions(v8::Isolate* isolate, v8::Local<v8::Object> options) {
|
||||||
|
auto context = isolate->GetCurrentContext();
|
||||||
|
auto maybe_keys = options->GetOwnPropertyNames(context);
|
||||||
|
if (maybe_keys.IsEmpty())
|
||||||
|
return;
|
||||||
|
std::vector<std::string> keys;
|
||||||
|
if (!mate::ConvertFromV8(isolate, maybe_keys.ToLocalChecked(), &keys))
|
||||||
|
return;
|
||||||
|
mate::Dictionary dict(isolate, options);
|
||||||
|
for (const auto& key : keys) {
|
||||||
|
v8::Local<v8::Value> value;
|
||||||
|
if (!dict.Get(key, &value)) // Shouldn't happen, but guard it anyway.
|
||||||
|
continue;
|
||||||
|
// Go recursively.
|
||||||
|
v8::Local<v8::Object> sub_options;
|
||||||
|
if (mate::ConvertFromV8(isolate, value, &sub_options))
|
||||||
|
TranslateOldOptions(isolate, sub_options);
|
||||||
|
// Translate key.
|
||||||
|
std::string new_key;
|
||||||
|
if (TranslateOldKey(key, &new_key)) {
|
||||||
|
dict.Set(new_key, value);
|
||||||
|
dict.Delete(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
// Convert binary data to Buffer.
|
// Converts binary data to Buffer.
|
||||||
v8::Local<v8::Value> ToBuffer(v8::Isolate* isolate, void* val, int size) {
|
v8::Local<v8::Value> ToBuffer(v8::Isolate* isolate, void* val, int size) {
|
||||||
auto buffer = node::Buffer::New(isolate, static_cast<char*>(val), size);
|
auto buffer = node::Buffer::New(isolate, static_cast<char*>(val), size);
|
||||||
if (buffer.IsEmpty())
|
if (buffer.IsEmpty())
|
||||||
|
@ -77,7 +122,10 @@ v8::Local<v8::Value> ToBuffer(v8::Isolate* isolate, void* val, int size) {
|
||||||
|
|
||||||
|
|
||||||
Window::Window(v8::Isolate* isolate, const mate::Dictionary& options) {
|
Window::Window(v8::Isolate* isolate, const mate::Dictionary& options) {
|
||||||
// Use options['web-preferences'] to create WebContents.
|
// Be compatible with old style field names like min-width.
|
||||||
|
TranslateOldOptions(isolate, options.GetHandle());
|
||||||
|
|
||||||
|
// Use options.webPreferences to create WebContents.
|
||||||
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
|
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
|
||||||
options.Get(switches::kWebPreferences, &web_preferences);
|
options.Get(switches::kWebPreferences, &web_preferences);
|
||||||
|
|
||||||
|
|
2
vendor/native_mate
vendored
2
vendor/native_mate
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 21cda4e7fcff592f33f989c1fea575658281711d
|
Subproject commit 93984941005bab194a2d47aff655d525c064efcb
|
Loading…
Add table
Add a link
Reference in a new issue