| Index: third_party/WebKit/Source/core/dom/NotShared.h
|
| diff --git a/third_party/WebKit/Source/core/dom/NotShared.h b/third_party/WebKit/Source/core/dom/NotShared.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..69173aaea4610677a9fcc4a8d9ea73971f742986
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/dom/NotShared.h
|
| @@ -0,0 +1,68 @@
|
| +// 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 NotShared_h
|
| +#define NotShared_h
|
| +
|
| +// A wrapper template type that is used to ensure that a TypedArray is not
|
| +// backed by a SharedArrayBuffer.
|
| +//
|
| +// Typically this is used as an annotation on C++ functions that are called by
|
| +// the bindings layer, e.g.:
|
| +//
|
| +// void Foo(NotShared<DOMUint32Array> param) {
|
| +// DOMUint32Array* array = param.View();
|
| +// ...
|
| +// }
|
| +
|
| +#include "platform/heap/Handle.h"
|
| +
|
| +namespace blink {
|
| +
|
| +template <typename T>
|
| +class NotShared {
|
| + STACK_ALLOCATED();
|
| +
|
| + public:
|
| + using TypedArrayType = T;
|
| +
|
| + NotShared() {}
|
| +
|
| + explicit NotShared(T* typedArray) : typed_array_(typedArray) {
|
| + DCHECK(!(typedArray && typedArray->View()->IsShared()));
|
| + }
|
| + NotShared(const NotShared& other) = default;
|
| + template <typename U>
|
| + NotShared(const NotShared<U>& other) : typed_array_(other.View()) {}
|
| + template <typename U>
|
| + NotShared(const Member<U>& other) {
|
| + DCHECK(!other->View()->IsShared());
|
| + typed_array_ = other.Get();
|
| + }
|
| +
|
| + NotShared& operator=(const NotShared& other) = default;
|
| + template <typename U>
|
| + NotShared& operator=(const NotShared<U>& other) {
|
| + typed_array_ = other.View();
|
| + return *this;
|
| + }
|
| +
|
| + T* View() const { return typed_array_.Get(); }
|
| +
|
| + bool operator!() const { return !typed_array_; }
|
| + explicit operator bool() const { return !!typed_array_; }
|
| +
|
| + private:
|
| + // Must use an untraced member here since this object may be constructed on a
|
| + // thread without a ThreadState (e.g. an Audio worklet). It is safe in that
|
| + // case because the pointed-to ArrayBuffer is being kept alive another way
|
| + // (e.g. CrossThreadPersistent).
|
| + //
|
| + // TODO(binji): update to using Member, see crbug.com/710295.
|
| + UntracedMember<T> typed_array_;
|
| +};
|
| +
|
| +} // namespace blink
|
| +
|
| +#endif // NotShared_h
|
|
|