Commit b6c4101d authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Merge NavigatorClipboard and Clipboard

NavigatorClipboard is mostly boilerplate, and Clipboard can be the
Supplement<Navigator> cleanly.

Change-Id: Ieb7db5f8172a08c193dff261bcaa43fda7f47dd7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2499367
Commit-Queue: Darwin Huang <huangdarwin@chromium.org>
Reviewed-by: default avatarDarwin Huang <huangdarwin@chromium.org>
Auto-Submit: Nate Chapin <japhet@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821812}
parent 762f6a2b
......@@ -16,8 +16,6 @@ blink_modules_sources("clipboard") {
"clipboard_reader.h",
"clipboard_writer.cc",
"clipboard_writer.h",
"navigator_clipboard.cc",
"navigator_clipboard.h",
]
deps = [
"//third_party/blink/public:blink_headers",
......
......@@ -7,16 +7,29 @@
#include <utility>
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_clipboard_item_options.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/modules/clipboard/clipboard_promise.h"
namespace blink {
Clipboard::Clipboard(ExecutionContext* context)
: ExecutionContextClient(context) {
DCHECK(context);
// static
const char Clipboard::kSupplementName[] = "Clipboard";
Clipboard* Clipboard::clipboard(Navigator& navigator) {
if (!navigator.DomWindow())
return nullptr;
Clipboard* clipboard = Supplement<Navigator>::From<Clipboard>(navigator);
if (!clipboard) {
clipboard = MakeGarbageCollected<Clipboard>(navigator);
ProvideTo(navigator, clipboard);
}
return clipboard;
}
Clipboard::Clipboard(Navigator& navigator) : Supplement<Navigator>(navigator) {}
ScriptPromise Clipboard::read(ScriptState* script_state) {
return read(script_state, ClipboardItemOptions::Create());
}
......@@ -49,12 +62,12 @@ const AtomicString& Clipboard::InterfaceName() const {
}
ExecutionContext* Clipboard::GetExecutionContext() const {
return ExecutionContextClient::GetExecutionContext();
return GetSupplementable()->DomWindow();
}
void Clipboard::Trace(Visitor* visitor) const {
EventTargetWithInlineData::Trace(visitor);
ExecutionContextClient::Trace(visitor);
Supplement<Navigator>::Trace(visitor);
}
} // namespace blink
......@@ -10,21 +10,24 @@
#include "base/macros.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/core/dom/events/event_target.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/core/fileapi/blob.h"
#include "third_party/blink/renderer/modules/clipboard/clipboard_item.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class ClipboardItemOptions;
class Navigator;
class ScriptState;
class Clipboard : public EventTargetWithInlineData,
public ExecutionContextClient {
public Supplement<Navigator> {
DEFINE_WRAPPERTYPEINFO();
public:
explicit Clipboard(ExecutionContext* execution_context);
static const char kSupplementName[];
static Clipboard* clipboard(Navigator&);
explicit Clipboard(Navigator&);
ScriptPromise read(ScriptState*);
ScriptPromise read(ScriptState*, ClipboardItemOptions*);
......
// Copyright 2017 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/modules/clipboard/navigator_clipboard.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/modules/clipboard/clipboard.h"
namespace blink {
// static
const char NavigatorClipboard::kSupplementName[] = "NavigatorClipboard";
Clipboard* NavigatorClipboard::clipboard(ScriptState* script_state,
Navigator& navigator) {
NavigatorClipboard* supplement =
Supplement<Navigator>::From<NavigatorClipboard>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<NavigatorClipboard>(navigator);
ProvideTo(navigator, supplement);
}
if (!supplement->GetSupplementable()->GetFrame())
return nullptr;
return supplement->clipboard_;
}
void NavigatorClipboard::Trace(Visitor* visitor) const {
visitor->Trace(clipboard_);
Supplement<Navigator>::Trace(visitor);
}
NavigatorClipboard::NavigatorClipboard(Navigator& navigator)
: Supplement<Navigator>(navigator) {
// TODO(crbug.com/1028591): Figure out how navigator.clipboard is supposed to
// behave in a detached execution context.
if (!GetSupplementable()->DomWindow())
return;
clipboard_ =
MakeGarbageCollected<Clipboard>(GetSupplementable()->DomWindow());
}
} // namespace blink
// Copyright 2017 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_MODULES_CLIPBOARD_NAVIGATOR_CLIPBOARD_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_CLIPBOARD_NAVIGATOR_CLIPBOARD_H_
#include "base/macros.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class Clipboard;
class ScriptState;
class NavigatorClipboard final : public GarbageCollected<NavigatorClipboard>,
public Supplement<Navigator> {
public:
static const char kSupplementName[];
static Clipboard* clipboard(ScriptState*, Navigator&);
explicit NavigatorClipboard(Navigator&);
void Trace(Visitor*) const override;
private:
Member<Clipboard> clipboard_;
DISALLOW_COPY_AND_ASSIGN(NavigatorClipboard);
};
} // namespace blink
#endif // NavigatorClipboard.h
......@@ -5,8 +5,7 @@
// https://w3c.github.io/clipboard-apis/#navigator-interface
[
ImplementedAs=NavigatorClipboard
ImplementedAs=Clipboard
] partial interface Navigator {
[CallWith=ScriptState, SecureContext, SameObject]
readonly attribute Clipboard clipboard;
[SecureContext, SameObject] readonly attribute Clipboard clipboard;
};
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