Commit da186a79 authored by Hassan Talat's avatar Hassan Talat Committed by Chromium LUCI CQ

dpwas: Add object to Window Controls Overlay (WCO) Javascript API

This CL adds windowControlsOverlay object to the window.navigator
API. The changes are behind the flag: "WebAppWindowControlsOverlay"

Explainer: https://github.com/WICG/window-controls-overlay/blob/master/explainer.md
Design Doc: https://docs.google.com/document/d/1k0YL_-VMLIfjYCgJ2v6cMvuUv2qMKg4BgLI2tJ4qtyo/edit?usp=sharing
I2P: https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/cper6nNLFRQ/hU91kfCWBQAJ

Bug: 937121
Change-Id: Iabe3ff49ab4948e3aa225fb2764f6975c890bddf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2549120Reviewed-by: default avatarChase Phillips <cmp@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Hassan Talat <hatalat@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#832180}
parent a363aa5a
...@@ -1373,6 +1373,8 @@ generated_interface_sources_in_core = [ ...@@ -1373,6 +1373,8 @@ generated_interface_sources_in_core = [
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_wheel_event.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_wheel_event.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_global_scope.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_global_scope.cc",
......
...@@ -273,6 +273,7 @@ static_idl_files_in_core = get_path_info( ...@@ -273,6 +273,7 @@ static_idl_files_in_core = get_path_info(
"//third_party/blink/renderer/core/frame/navigator_ua_brand_version.idl", "//third_party/blink/renderer/core/frame/navigator_ua_brand_version.idl",
"//third_party/blink/renderer/core/frame/navigator_ua_data.idl", "//third_party/blink/renderer/core/frame/navigator_ua_data.idl",
"//third_party/blink/renderer/core/frame/navigator_user_activation.idl", "//third_party/blink/renderer/core/frame/navigator_user_activation.idl",
"//third_party/blink/renderer/core/frame/navigator_window_controls_overlay.idl",
"//third_party/blink/renderer/core/frame/report.idl", "//third_party/blink/renderer/core/frame/report.idl",
"//third_party/blink/renderer/core/frame/report_body.idl", "//third_party/blink/renderer/core/frame/report_body.idl",
"//third_party/blink/renderer/core/frame/reporting_observer.idl", "//third_party/blink/renderer/core/frame/reporting_observer.idl",
...@@ -287,6 +288,7 @@ static_idl_files_in_core = get_path_info( ...@@ -287,6 +288,7 @@ static_idl_files_in_core = get_path_info(
"//third_party/blink/renderer/core/frame/user_activation.idl", "//third_party/blink/renderer/core/frame/user_activation.idl",
"//third_party/blink/renderer/core/frame/visual_viewport.idl", "//third_party/blink/renderer/core/frame/visual_viewport.idl",
"//third_party/blink/renderer/core/frame/window.idl", "//third_party/blink/renderer/core/frame/window.idl",
"//third_party/blink/renderer/core/frame/window_controls_overlay.idl",
"//third_party/blink/renderer/core/frame/window_event_handlers.idl", "//third_party/blink/renderer/core/frame/window_event_handlers.idl",
"//third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl", "//third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl",
"//third_party/blink/renderer/core/frame/window_post_message_options.idl", "//third_party/blink/renderer/core/frame/window_post_message_options.idl",
......
...@@ -201,6 +201,7 @@ core_interface_idl_files_core_only = ...@@ -201,6 +201,7 @@ core_interface_idl_files_core_only =
"frame/test_report_body.idl", "frame/test_report_body.idl",
"frame/user_activation.idl", "frame/user_activation.idl",
"frame/visual_viewport.idl", "frame/visual_viewport.idl",
"frame/window_controls_overlay.idl",
"geometry/dom_matrix.idl", "geometry/dom_matrix.idl",
"geometry/dom_matrix_read_only.idl", "geometry/dom_matrix_read_only.idl",
"geometry/dom_point.idl", "geometry/dom_point.idl",
...@@ -555,6 +556,7 @@ core_partial_definition_idl_files = ...@@ -555,6 +556,7 @@ core_partial_definition_idl_files =
"frame/navigator_scheduling.idl", "frame/navigator_scheduling.idl",
"frame/navigator_ua.idl", "frame/navigator_ua.idl",
"frame/navigator_user_activation.idl", "frame/navigator_user_activation.idl",
"frame/navigator_window_controls_overlay.idl",
"frame/window_event_handlers.idl", "frame/window_event_handlers.idl",
"frame/window_or_worker_global_scope.idl", "frame/window_or_worker_global_scope.idl",
"fullscreen/document_fullscreen.idl", "fullscreen/document_fullscreen.idl",
......
...@@ -217,6 +217,8 @@ blink_core_sources_frame = [ ...@@ -217,6 +217,8 @@ blink_core_sources_frame = [
"web_local_frame_client.cc", "web_local_frame_client.cc",
"web_remote_frame_impl.h", "web_remote_frame_impl.h",
"window_event_handlers.h", "window_event_handlers.h",
"window_controls_overlay.cc",
"window_controls_overlay.h",
"window_or_worker_global_scope.cc", "window_or_worker_global_scope.cc",
"window_or_worker_global_scope.h", "window_or_worker_global_scope.h",
] ]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://github.com/WICG/window-controls-overlay/blob/master/explainer.md
[
ImplementedAs=WindowControlsOverlay,
RuntimeEnabled=WebAppWindowControlsOverlay
] partial interface Navigator {
[SameObject] readonly attribute WindowControlsOverlay windowControlsOverlay;
};
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/core/frame/window_controls_overlay.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
namespace blink {
// static
const char WindowControlsOverlay::kSupplementName[] = "WindowControlsOverlay";
// static
WindowControlsOverlay* WindowControlsOverlay::windowControlsOverlay(
Navigator& navigator) {
auto* supplement =
Supplement<Navigator>::From<WindowControlsOverlay>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<WindowControlsOverlay>(navigator);
ProvideTo(navigator, supplement);
}
return supplement;
}
WindowControlsOverlay::WindowControlsOverlay(Navigator& navigator)
: Supplement<Navigator>(navigator) {}
WindowControlsOverlay::~WindowControlsOverlay() = default;
bool WindowControlsOverlay::visible() const {
if (!GetSupplementable()->DomWindow()->GetFrame())
return false;
// TODO(crbug.com/937121): Replace the hardcoded value in the next javascript
// API CL.
return false;
}
DOMRect* WindowControlsOverlay::getBoundingClientRect() const {
if (!GetSupplementable()->DomWindow()->GetFrame())
return DOMRect::Create(0, 0, 0, 0);
// TODO(crbug.com/937121): Replace the hardcoded value in the next javascript
// API CL.
return DOMRect::Create(0, 0, 0, 0);
}
void WindowControlsOverlay::Trace(blink::Visitor* visitor) const {
ScriptWrappable::Trace(visitor);
Supplement<Navigator>::Trace(visitor);
}
} // namespace blink
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WINDOW_CONTROLS_OVERLAY_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WINDOW_CONTROLS_OVERLAY_H_
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class DOMRect;
class Navigator;
class CORE_EXPORT WindowControlsOverlay final : public ScriptWrappable,
public Supplement<Navigator> {
DEFINE_WRAPPERTYPEINFO();
public:
static const char kSupplementName[];
// Web Exposed as navigator.windowControlsOverlay
static WindowControlsOverlay* windowControlsOverlay(Navigator& navigator);
explicit WindowControlsOverlay(Navigator& navigator);
WindowControlsOverlay(const WindowControlsOverlay&) = delete;
~WindowControlsOverlay() override;
WindowControlsOverlay& operator=(const WindowControlsOverlay&) = delete;
bool visible() const;
DOMRect* getBoundingClientRect() const;
// ScriptWrappable
void Trace(Visitor*) const override;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WINDOW_CONTROLS_OVERLAY_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://github.com/WICG/window-controls-overlay/blob/master/explainer.md
[
RuntimeEnabled=WebAppWindowControlsOverlay,
Exposed=Window
] interface WindowControlsOverlay {
readonly attribute boolean visible;
DOMRect getBoundingClientRect();
};
This is a testharness.js-based test.
FAIL the windowControlsOverlay object should exist on the navigator object assert_idl_attribute: property "windowControlsOverlay" not found in prototype chain
FAIL visible should be a member of the windowControlsOverlay object assert_idl_attribute: provided value is not an object
FAIL visible should be false Cannot read property 'visible' of undefined
FAIL getBoundingClientRect should be a method of the windowControlsOverlay object assert_idl_attribute: provided value is not an object
FAIL getBoundingClientRect return type should be DOMRect Cannot read property 'getBoundingClientRect' of undefined
FAIL getBoundingClientRect should return a empty DOMRect Cannot read property 'getBoundingClientRect' of undefined
Harness: the test ran to completion.
<!DOCTYPE html>
<meta charset='utf-8'>
<title>navigator.windowControlsOverlay</title>
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<script>
test(function(){
assert_idl_attribute(navigator, 'windowControlsOverlay');
}, 'the windowControlsOverlay object should exist on the navigator object');
test(function(){
assert_idl_attribute(navigator.windowControlsOverlay, 'visible');
}, 'visible should be a member of the windowControlsOverlay object');
test(function(){
assert_false(navigator.windowControlsOverlay.visible);
}, 'visible should be false');
test(function(){
assert_idl_attribute(navigator.windowControlsOverlay, 'getBoundingClientRect');
}, 'getBoundingClientRect should be a method of the windowControlsOverlay object');
test(function(){
var rect = navigator.windowControlsOverlay.getBoundingClientRect();
assert_true(rect instanceof DOMRect);
}, 'getBoundingClientRect return type should be DOMRect');
test(function(){
var rect = navigator.windowControlsOverlay.getBoundingClientRect();
assert_equals(rect.x, 0);
assert_equals(rect.y, 0);
assert_equals(rect.width, 0);
assert_equals(rect.height, 0);
}, 'getBoundingClientRect should return a empty DOMRect');
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment