d62097e067
* chore: bump chromium in DEPS to 130.0.6673.0 * chore: bump chromium in DEPS to 130.0.6675.0 * chore: bump chromium in DEPS to 130.0.6677.2 * chore: bump chromium in DEPS to 130.0.6679.1 * chore: bump chromium in DEPS to 130.0.6681.1 * chore: bump chromium in DEPS to 130.0.6683.2 * chore: bump chromium in DEPS to 130.0.6685.0 * chore: bump chromium in DEPS to 130.0.6687.0 * chore: bump chromium in DEPS to 130.0.6689.0 * chore: bump chromium in DEPS to 130.0.6691.1 * chore: bump chromium in DEPS to 130.0.6693.1 * chore: bump chromium in DEPS to 130.0.6695.1 * chore: bump chromium in DEPS to 130.0.6697.1 * chore: bump chromium in DEPS to 130.0.6699.1 * chore: bump chromium in DEPS to 130.0.6701.1 * chore: bump chromium in DEPS to 130.0.6703.1 * chore: bump chromium in DEPS to 130.0.6705.1 * chore: bump chromium in DEPS to 130.0.6707.1 * chore: bump chromium in DEPS to 130.0.6709.1 * chore: bump chromium in DEPS to 130.0.6711.1 * chore: bump chromium in DEPS to 130.0.6713.1 * chore: bump chromium in DEPS to 130.0.6715.2 * chore: bump chromium in DEPS to 130.0.6717.0 * chore: bump chromium in DEPS to 130.0.6719.1 * chore: bump chromium in DEPS to 130.0.6720.1 * chore: bump chromium in DEPS to 130.0.6723.1 * chore: bump chromium in DEPS to 130.0.6723.4 * chore: bump chromium in DEPS to 130.0.6723.6 * chore: bump chromium to 130.0.6695.0 (main) (#43454) * chore: bump chromium in DEPS to 130.0.6673.0 * chore: bump chromium in DEPS to 130.0.6675.0 * chore: bump chromium in DEPS to 130.0.6677.2 * chore: bump chromium in DEPS to 130.0.6679.0 * 5802981: [Partitioned Popins] UKM https://chromium-review.googlesource.com/c/chromium/src/+/5802981 * 5799275: ash: Create //chrome/browser/ui/ash/web_view https://chromium-review.googlesource.com/c/chromium/src/+/5799275 * 5791853: [PWA] Allow WebContentsImpl::CreateNewWindow() to use new web contents for loading url https://chromium-review.googlesource.com/c/chromium/src/+/5791853 * 5805208: Move third_party/jacoco to a cipd/ subdirectory. https://chromium-review.googlesource.com/c/chromium/src/+/5805208 * chore: fixup patch indices * 5771091: Introduce InputManager class for handling input in Viz. https://chromium-review.googlesource.com/c/chromium/src/+/5771091 * 5498921: [Permission] Remove SubscribeToPermissionStatusChange from PermissionManager https://chromium-review.googlesource.com/c/chromium/src/+/5498921 * 5791853: [PWA] Allow WebContentsImpl::CreateNewWindow() to use new web contents for loading url https://chromium-review.googlesource.com/c/chromium/src/+/5791853 * 5801311: Don't use int for bindings https://chromium-review.googlesource.com/c/chromium/src/+/5801311 * 5548827: [Web Install] Define the web-app-installation PermissionPolicy https://chromium-review.googlesource.com/c/chromium/src/+/5548827 * 5786325: Add Infrastructure for Hand tracking permission https://chromium-review.googlesource.com/c/chromium/src/+/5786325 * chore: fixup patch indices * chore: bump chromium in DEPS to 130.0.6681.0 * [Views AX] Move BrowserAccessibility* to //ui/accessibility/platform Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5520052 * chore: e patches all * Don't have default arguments on virtual functions in render_frame_host.h https://chromium-review.googlesource.com/c/chromium/src/+/5809399 * test: log if loadURL fails in base url test * chore: bump chromium in DEPS to 130.0.6683.2 * chore: fix support_mixed_sandbox_with_zygote.patch content: restore old DisableJit behavior https://chromium-review.googlesource.com/c/chromium/src/+/5804255 * chore: update patch indices * chore: bump chromium in DEPS to 130.0.6685.0 * Parallel process launching Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5015584 * chore: update feat_expose_documentloader_setdefersloading_on_webdocumentloader.patch No manual changes; patch applied with fuzz 1 * chore: e patches all * chore: bump chromium in DEPS to 130.0.6687.0 * chore: bump chromium in DEPS to 130.0.6689.0 * chore: bump chromium in DEPS to 130.0.6691.0 * chore: bump chromium in DEPS to 130.0.6693.0 * chore: update patches * chore: bump chromium in DEPS to 130.0.6695.0 * chore: free up macos disk space as soon as possible * 5824143: Use checked in source lists for third_party/boringssl https://chromium-review.googlesource.com/c/chromium/src/+/5824143 * chore: update patches * 5824122: Extensions: Add a new view type enum for developer tools contexts https://chromium-review.googlesource.com/c/chromium/src/+/5824122 * 5806109: Option for JavaScriptExecuteRequestForTests() to ignore content settings https://chromium-review.googlesource.com/c/chromium/src/+/5806109 * build: free up disk space on gn check too * 5799369: [Refactoring] Make allow_http1_for_streaming_upload flags false. https://chromium-review.googlesource.com/c/chromium/src/+/5799369 * fixup! 5015584: Parallel process launching | https://chromium-review.googlesource.com/c/chromium/src/+/5015584 * Disable failing test for short-term See: https://github.com/electron/electron/issues/43730 * oops --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: Charles Kerr <charles@charleskerr.com> Co-authored-by: Keeley Hammond <khammond@slack-corp.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: clavin <clavin@electronjs.org> (cherry picked from commit4bcbc955dd
) * build: update appveyor image to latest version (#43772) Co-authored-by: electron-appveyor-updater[bot] <161660339+electron-appveyor-updater[bot]@users.noreply.github.com> (cherry picked from commit02fd8bbcc1
) * chore: fixup patches * chore: fixup patch * chore: bump chromium in DEPS to 130.0.6723.6 * chore: update filenames.libcxx.gni * test: re-enable disabled test * 5844369: controlledframe: Disable Web Bluetooth for <webview> & <controlledframe> https://chromium-review.googlesource.com/c/chromium/src/+/5844369 (cherry picked from commit 0ac4852763f0dce3468d30907620211f34c4104b) * (multiple CLs): Use an opaque type for FrameTreeNode IDs 5807683: Use an opaque type for FrameTreeNode IDs, part 1 | https://chromium-review.googlesource.com/c/chromium/src/+/5807683 5829746: Use an opaque type for FrameTreeNode IDs, part 2 | https://chromium-review.googlesource.com/c/chromium/src/+/5829746 5836903: Use an opaque type for FrameTreeNode IDs, part 7 | https://chromium-review.googlesource.com/c/chromium/src/+/5836903 5837249: Use an opaque type for FrameTreeNode IDs, part 8 | https://chromium-review.googlesource.com/c/chromium/src/+/5837249 5836564: Use an opaque type for FrameTreeNode IDs, part 12 | https://chromium-review.googlesource.com/c/chromium/src/+/5836564 5837180: Use an opaque type for FrameTreeNode IDs, part 15 | https://chromium-review.googlesource.com/c/chromium/src/+/5837180 (cherry picked from commit 1dd67f5241a3a24ea5a20f11efefdd2afc520a26) * 5822889: [task] Make GetForegroundTaskRunner non-virtual https://chromium-review.googlesource.com/c/v8/v8/+/5822889 (cherry picked from commit ae1e7232a35260cce8c4303d5f9809aa166bf19b) * 5833297: Remove unused inner WebContents attach params https://chromium-review.googlesource.com/c/chromium/src/+/5833297 (cherry picked from commit 390bb42e39eba66cd86221461d2822bbd85012df) * 5806403: Shift PowerMonitor to non static https://chromium-review.googlesource.com/c/chromium/src/+/5806403 (cherry picked from commit 128e3826e13768e89c7f5117de451ebd2b3ec9a4) * 5666874: [3/N] Remove old OnPowerChange in PowerObserver https://chromium-review.googlesource.com/c/chromium/src/+/5666874 (cherry picked from commit 6ea6ea14ae23ced6465b94fd753f8c80ced4b13b) * 5829085: [v8] Differentiate between UserVisible and BestEffort task runners https://chromium-review.googlesource.com/c/chromium/src/+/5829085 (cherry picked from commit 1db28ee4a51fb2593e4c11bcaa538a6524abe48c) * 5791112: [webrtc] Use `c/b/permissions/system` for system permissions https://chromium-review.googlesource.com/c/chromium/src/+/5791112 (cherry picked from commit 50d4a71923ca99653bf5733145bdc6e21f783b2d) * fixup! (multiple CLs): Use an opaque type for FrameTreeNode IDs (cherry picked from commit 9271130e160d479b3d286d295045b9d4acd2005c) * fixup! 5791112: [webrtc] Use `c/b/permissions/system` for system permissions https://chromium-review.googlesource.com/c/chromium/src/+/5791112 (cherry picked from commit db2c8c69d0c7bdee881997847dfc3c8abf32197c) * 5825636: [Extensions] Create WebContentsObservers with ExtensionsBrowserClient https://chromium-review.googlesource.com/c/chromium/src/+/5825636 (cherry picked from commit f2c3d09ccd141dbe2f4b62957b72f98bf8a010ae) * 5854811: Use kNotAllowedError instead of kSecurityError for Web MIDI https://chromium-review.googlesource.com/c/chromium/src/+/5854811 * test: fix should support base url for data urls test Caused by https://chromium-review.googlesource.com/c/chromium/src/+/5802682 * test: fixup extensions can cancel http requests * chore: document custom protocol handling on Windows change due to Non-Special Scheme URLs shipping https://chromium-review.googlesource.com/c/chromium/src/+/5802682 --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: electron-appveyor-updater[bot] <161660339+electron-appveyor-updater[bot]@users.noreply.github.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: clavin <clavin@electronjs.org>
334 lines
13 KiB
C++
334 lines
13 KiB
C++
// Copyright (c) 2015 GitHub, Inc.
|
|
// Use of this source code is governed by the MIT license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "shell/common/gin_converters/content_converter.h"
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
#include "base/containers/fixed_flat_map.h"
|
|
#include "components/input/native_web_keyboard_event.h"
|
|
#include "content/public/browser/context_menu_params.h"
|
|
#include "content/public/browser/web_contents.h"
|
|
#include "shell/browser/api/electron_api_web_contents.h"
|
|
#include "shell/browser/web_contents_permission_helper.h"
|
|
#include "shell/common/gin_converters/blink_converter.h"
|
|
#include "shell/common/gin_converters/callback_converter.h"
|
|
#include "shell/common/gin_converters/frame_converter.h"
|
|
#include "shell/common/gin_converters/gfx_converter.h"
|
|
#include "shell/common/gin_converters/gurl_converter.h"
|
|
#include "shell/common/gin_helper/dictionary.h"
|
|
#include "third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h"
|
|
#include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
|
|
#include "ui/events/keycodes/dom/keycode_converter.h"
|
|
#include "ui/events/keycodes/keyboard_code_conversion.h"
|
|
|
|
namespace gin {
|
|
|
|
static constexpr auto MenuSourceTypes =
|
|
base::MakeFixedFlatMap<std::string_view, ui::MenuSourceType>({
|
|
{"adjustSelection", ui::MENU_SOURCE_ADJUST_SELECTION},
|
|
{"adjustSelectionReset", ui::MENU_SOURCE_ADJUST_SELECTION_RESET},
|
|
{"keyboard", ui::MENU_SOURCE_KEYBOARD},
|
|
{"longPress", ui::MENU_SOURCE_LONG_PRESS},
|
|
{"longTap", ui::MENU_SOURCE_LONG_TAP},
|
|
{"mouse", ui::MENU_SOURCE_MOUSE},
|
|
{"none", ui::MENU_SOURCE_NONE},
|
|
{"stylus", ui::MENU_SOURCE_STYLUS},
|
|
{"touch", ui::MENU_SOURCE_TOUCH},
|
|
{"touchHandle", ui::MENU_SOURCE_TOUCH_HANDLE},
|
|
{"touchMenu", ui::MENU_SOURCE_TOUCH_EDIT_MENU},
|
|
});
|
|
|
|
// let us know when upstream changes & we need to update MenuSourceTypes
|
|
static_assert(std::size(MenuSourceTypes) == ui::MENU_SOURCE_TYPE_LAST + 1U);
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<ui::MenuSourceType>::ToV8(
|
|
v8::Isolate* isolate,
|
|
const ui::MenuSourceType& in) {
|
|
for (auto const& [key, val] : MenuSourceTypes)
|
|
if (in == val)
|
|
return StringToV8(isolate, key);
|
|
return {};
|
|
}
|
|
|
|
// static
|
|
bool Converter<ui::MenuSourceType>::FromV8(v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
ui::MenuSourceType* out) {
|
|
return FromV8WithLookup(isolate, val, MenuSourceTypes, out);
|
|
}
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<blink::mojom::MenuItem::Type>::ToV8(
|
|
v8::Isolate* isolate,
|
|
const blink::mojom::MenuItem::Type& val) {
|
|
switch (val) {
|
|
case blink::mojom::MenuItem::Type::kCheckableOption:
|
|
return StringToV8(isolate, "checkbox");
|
|
case blink::mojom::MenuItem::Type::kGroup:
|
|
return StringToV8(isolate, "radio");
|
|
case blink::mojom::MenuItem::Type::kSeparator:
|
|
return StringToV8(isolate, "separator");
|
|
case blink::mojom::MenuItem::Type::kSubMenu:
|
|
return StringToV8(isolate, "submenu");
|
|
case blink::mojom::MenuItem::Type::kOption:
|
|
default:
|
|
return StringToV8(isolate, "normal");
|
|
}
|
|
}
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<ContextMenuParamsWithRenderFrameHost>::ToV8(
|
|
v8::Isolate* isolate,
|
|
const ContextMenuParamsWithRenderFrameHost& val) {
|
|
const auto& params = val.first;
|
|
content::RenderFrameHost* render_frame_host = val.second;
|
|
auto dict = gin_helper::Dictionary::CreateEmpty(isolate);
|
|
dict.SetGetter("frame", render_frame_host, v8::DontEnum);
|
|
dict.Set("x", params.x);
|
|
dict.Set("y", params.y);
|
|
dict.Set("linkURL", params.link_url);
|
|
dict.Set("linkText", params.link_text);
|
|
dict.Set("pageURL", params.page_url);
|
|
dict.Set("frameURL", params.frame_url);
|
|
dict.Set("srcURL", params.src_url);
|
|
dict.Set("mediaType", params.media_type);
|
|
dict.Set("mediaFlags", MediaFlagsToV8(isolate, params.media_flags));
|
|
bool has_image_contents =
|
|
(params.media_type == blink::mojom::ContextMenuDataMediaType::kImage) &&
|
|
params.has_image_contents;
|
|
dict.Set("hasImageContents", has_image_contents);
|
|
dict.Set("isEditable", params.is_editable);
|
|
dict.Set("editFlags", EditFlagsToV8(isolate, params.edit_flags));
|
|
dict.Set("selectionText", params.selection_text);
|
|
dict.Set("titleText", params.title_text);
|
|
dict.Set("altText", params.alt_text);
|
|
dict.Set("suggestedFilename", params.suggested_filename);
|
|
dict.Set("misspelledWord", params.misspelled_word);
|
|
dict.Set("selectionRect", params.selection_rect);
|
|
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
|
dict.Set("dictionarySuggestions", params.dictionary_suggestions);
|
|
dict.Set("spellcheckEnabled", params.spellcheck_enabled);
|
|
#else
|
|
dict.Set("spellcheckEnabled", false);
|
|
#endif
|
|
dict.Set("frameCharset", params.frame_charset);
|
|
dict.Set("referrerPolicy", params.referrer_policy);
|
|
dict.Set("formControlType", params.form_control_type);
|
|
dict.Set("menuSourceType", params.source_type);
|
|
|
|
return gin::ConvertToV8(isolate, dict);
|
|
}
|
|
|
|
// static
|
|
bool Converter<blink::mojom::PermissionStatus>::FromV8(
|
|
v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
blink::mojom::PermissionStatus* out) {
|
|
bool result;
|
|
if (!ConvertFromV8(isolate, val, &result))
|
|
return false;
|
|
|
|
if (result)
|
|
*out = blink::mojom::PermissionStatus::GRANTED;
|
|
else
|
|
*out = blink::mojom::PermissionStatus::DENIED;
|
|
|
|
return true;
|
|
}
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<blink::PermissionType>::ToV8(
|
|
v8::Isolate* isolate,
|
|
const blink::PermissionType& val) {
|
|
using PermissionType = electron::WebContentsPermissionHelper::PermissionType;
|
|
// Based on mappings from content/browser/devtools/protocol/browser_handler.cc
|
|
// Not all permissions are currently used by Electron but this will future
|
|
// proof these conversions.
|
|
switch (val) {
|
|
case blink::PermissionType::ACCESSIBILITY_EVENTS:
|
|
return StringToV8(isolate, "accessibility-events");
|
|
case blink::PermissionType::AUTOMATIC_FULLSCREEN:
|
|
return StringToV8(isolate, "automatic-fullscreen");
|
|
case blink::PermissionType::AR:
|
|
return StringToV8(isolate, "ar");
|
|
case blink::PermissionType::BACKGROUND_FETCH:
|
|
return StringToV8(isolate, "background-fetch");
|
|
case blink::PermissionType::BACKGROUND_SYNC:
|
|
return StringToV8(isolate, "background-sync");
|
|
case blink::PermissionType::CLIPBOARD_READ_WRITE:
|
|
return StringToV8(isolate, "clipboard-read");
|
|
case blink::PermissionType::CLIPBOARD_SANITIZED_WRITE:
|
|
return StringToV8(isolate, "clipboard-sanitized-write");
|
|
case blink::PermissionType::LOCAL_FONTS:
|
|
return StringToV8(isolate, "local-fonts");
|
|
case blink::PermissionType::HAND_TRACKING:
|
|
return StringToV8(isolate, "hand-tracking");
|
|
case blink::PermissionType::IDLE_DETECTION:
|
|
return StringToV8(isolate, "idle-detection");
|
|
case blink::PermissionType::KEYBOARD_LOCK:
|
|
return StringToV8(isolate, "keyboardLock");
|
|
case blink::PermissionType::MIDI_SYSEX:
|
|
return StringToV8(isolate, "midiSysex");
|
|
case blink::PermissionType::NFC:
|
|
return StringToV8(isolate, "nfc");
|
|
case blink::PermissionType::NOTIFICATIONS:
|
|
return StringToV8(isolate, "notifications");
|
|
case blink::PermissionType::PAYMENT_HANDLER:
|
|
return StringToV8(isolate, "payment-handler");
|
|
case blink::PermissionType::PERIODIC_BACKGROUND_SYNC:
|
|
return StringToV8(isolate, "periodic-background-sync");
|
|
case blink::PermissionType::DURABLE_STORAGE:
|
|
return StringToV8(isolate, "persistent-storage");
|
|
case blink::PermissionType::GEOLOCATION:
|
|
return StringToV8(isolate, "geolocation");
|
|
case blink::PermissionType::CAMERA_PAN_TILT_ZOOM:
|
|
case blink::PermissionType::AUDIO_CAPTURE:
|
|
case blink::PermissionType::VIDEO_CAPTURE:
|
|
return StringToV8(isolate, "media");
|
|
case blink::PermissionType::POINTER_LOCK:
|
|
return StringToV8(isolate, "pointerLock");
|
|
case blink::PermissionType::PROTECTED_MEDIA_IDENTIFIER:
|
|
return StringToV8(isolate, "mediaKeySystem");
|
|
case blink::PermissionType::MIDI:
|
|
return StringToV8(isolate, "midi");
|
|
case blink::PermissionType::WAKE_LOCK_SCREEN:
|
|
return StringToV8(isolate, "screen-wake-lock");
|
|
case blink::PermissionType::SENSORS:
|
|
return StringToV8(isolate, "sensors");
|
|
case blink::PermissionType::STORAGE_ACCESS_GRANT:
|
|
return StringToV8(isolate, "storage-access");
|
|
case blink::PermissionType::VR:
|
|
return StringToV8(isolate, "vr");
|
|
case blink::PermissionType::WAKE_LOCK_SYSTEM:
|
|
return StringToV8(isolate, "system-wake-lock");
|
|
case blink::PermissionType::WINDOW_MANAGEMENT:
|
|
return StringToV8(isolate, "window-management");
|
|
case blink::PermissionType::DISPLAY_CAPTURE:
|
|
return StringToV8(isolate, "display-capture");
|
|
case blink::PermissionType::TOP_LEVEL_STORAGE_ACCESS:
|
|
return StringToV8(isolate, "top-level-storage-access");
|
|
case blink::PermissionType::CAPTURED_SURFACE_CONTROL:
|
|
return StringToV8(isolate, "captured-surface-control");
|
|
case blink::PermissionType::SMART_CARD:
|
|
return StringToV8(isolate, "smart-card");
|
|
case blink::PermissionType::WEB_PRINTING:
|
|
return StringToV8(isolate, "web-printing");
|
|
case blink::PermissionType::SPEAKER_SELECTION:
|
|
return StringToV8(isolate, "speaker-selection");
|
|
case blink::PermissionType::WEB_APP_INSTALLATION:
|
|
return StringToV8(isolate, "web-app-installation");
|
|
case blink::PermissionType::NUM:
|
|
break;
|
|
}
|
|
|
|
switch (static_cast<PermissionType>(val)) {
|
|
case PermissionType::FULLSCREEN:
|
|
return StringToV8(isolate, "fullscreen");
|
|
case PermissionType::OPEN_EXTERNAL:
|
|
return StringToV8(isolate, "openExternal");
|
|
case PermissionType::SERIAL:
|
|
return StringToV8(isolate, "serial");
|
|
case PermissionType::HID:
|
|
return StringToV8(isolate, "hid");
|
|
case PermissionType::USB:
|
|
return StringToV8(isolate, "usb");
|
|
case PermissionType::FILE_SYSTEM:
|
|
return StringToV8(isolate, "fileSystem");
|
|
default:
|
|
return StringToV8(isolate, "unknown");
|
|
}
|
|
}
|
|
|
|
// static
|
|
bool Converter<content::StopFindAction>::FromV8(v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
content::StopFindAction* out) {
|
|
using Val = content::StopFindAction;
|
|
static constexpr auto Lookup = base::MakeFixedFlatMap<std::string_view, Val>({
|
|
{"activateSelection", Val::STOP_FIND_ACTION_ACTIVATE_SELECTION},
|
|
{"clearSelection", Val::STOP_FIND_ACTION_CLEAR_SELECTION},
|
|
{"keepSelection", Val::STOP_FIND_ACTION_KEEP_SELECTION},
|
|
});
|
|
return FromV8WithLookup(isolate, val, Lookup, out);
|
|
}
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<content::WebContents*>::ToV8(
|
|
v8::Isolate* isolate,
|
|
content::WebContents* val) {
|
|
if (!val)
|
|
return v8::Null(isolate);
|
|
return electron::api::WebContents::FromOrCreate(isolate, val).ToV8();
|
|
}
|
|
|
|
// static
|
|
bool Converter<content::WebContents*>::FromV8(v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
content::WebContents** out) {
|
|
if (!val->IsObject())
|
|
return false;
|
|
// gin's unwrapping converter doesn't expect the pointer inside to ever be
|
|
// nullptr, so we check here first before attempting to unwrap.
|
|
if (gin_helper::Destroyable::IsDestroyed(val.As<v8::Object>()))
|
|
return false;
|
|
electron::api::WebContents* web_contents = nullptr;
|
|
if (!gin::ConvertFromV8(isolate, val, &web_contents) || !web_contents)
|
|
return false;
|
|
|
|
*out = web_contents->web_contents();
|
|
return true;
|
|
}
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<content::Referrer>::ToV8(
|
|
v8::Isolate* isolate,
|
|
const content::Referrer& val) {
|
|
auto dict = gin_helper::Dictionary::CreateEmpty(isolate);
|
|
dict.Set("url", ConvertToV8(isolate, val.url));
|
|
dict.Set("policy", ConvertToV8(isolate, val.policy));
|
|
return gin::ConvertToV8(isolate, dict);
|
|
}
|
|
|
|
// static
|
|
bool Converter<content::Referrer>::FromV8(v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
content::Referrer* out) {
|
|
gin_helper::Dictionary dict;
|
|
if (!ConvertFromV8(isolate, val, &dict))
|
|
return false;
|
|
|
|
if (!dict.Get("url", &out->url))
|
|
return false;
|
|
|
|
if (!dict.Get("policy", &out->policy))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
// static
|
|
bool Converter<input::NativeWebKeyboardEvent>::FromV8(
|
|
v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
input::NativeWebKeyboardEvent* out) {
|
|
gin_helper::Dictionary dict;
|
|
if (!ConvertFromV8(isolate, val, &dict))
|
|
return false;
|
|
if (!ConvertFromV8(isolate, val, static_cast<blink::WebKeyboardEvent*>(out)))
|
|
return false;
|
|
dict.Get("skipIfUnhandled", &out->skip_if_unhandled);
|
|
return true;
|
|
}
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<input::NativeWebKeyboardEvent>::ToV8(
|
|
v8::Isolate* isolate,
|
|
const input::NativeWebKeyboardEvent& in) {
|
|
return ConvertToV8(isolate, static_cast<blink::WebKeyboardEvent>(in));
|
|
}
|
|
|
|
} // namespace gin
|