Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/StringResource.h

Issue 2843603002: Move ScriptWrappable and dependencies to platform/bindings (Closed)
Patch Set: Rebase and try again Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef StringResource_h 5 // This file has been moved to platform/bindings/StringResource.h.
6 #define StringResource_h 6 // TODO(adithyas): Remove this file.
7 7 #include "platform/bindings/StringResource.h"
8 #include "core/CoreExport.h"
9 #include "platform/wtf/Allocator.h"
10 #include "platform/wtf/Threading.h"
11 #include "platform/wtf/text/AtomicString.h"
12 #include "v8/include/v8.h"
13
14 namespace blink {
15
16 // StringResource is a helper class for V8ExternalString. It is used
17 // to manage the life-cycle of the underlying buffer of the external string.
18 class StringResourceBase {
19 USING_FAST_MALLOC(StringResourceBase);
20 WTF_MAKE_NONCOPYABLE(StringResourceBase);
21
22 public:
23 explicit StringResourceBase(const String& string) : plain_string_(string) {
24 #if DCHECK_IS_ON()
25 thread_id_ = WTF::CurrentThread();
26 #endif
27 DCHECK(!string.IsNull());
28 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(
29 string.CharactersSizeInBytes());
30 }
31
32 explicit StringResourceBase(const AtomicString& string)
33 : plain_string_(string.GetString()), atomic_string_(string) {
34 #if DCHECK_IS_ON()
35 thread_id_ = WTF::CurrentThread();
36 #endif
37 DCHECK(!string.IsNull());
38 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(
39 string.CharactersSizeInBytes());
40 }
41
42 virtual ~StringResourceBase() {
43 #if DCHECK_IS_ON()
44 DCHECK(thread_id_ == WTF::CurrentThread());
45 #endif
46 int64_t reduced_external_memory = plain_string_.CharactersSizeInBytes();
47 if (plain_string_.Impl() != atomic_string_.Impl() &&
48 !atomic_string_.IsNull())
49 reduced_external_memory += atomic_string_.CharactersSizeInBytes();
50 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(
51 -reduced_external_memory);
52 }
53
54 const String& WebcoreString() { return plain_string_; }
55
56 const AtomicString& GetAtomicString() {
57 #if DCHECK_IS_ON()
58 DCHECK(thread_id_ == WTF::CurrentThread());
59 #endif
60 if (atomic_string_.IsNull()) {
61 atomic_string_ = AtomicString(plain_string_);
62 DCHECK(!atomic_string_.IsNull());
63 if (plain_string_.Impl() != atomic_string_.Impl()) {
64 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(
65 atomic_string_.CharactersSizeInBytes());
66 }
67 }
68 return atomic_string_;
69 }
70
71 protected:
72 // A shallow copy of the string. Keeps the string buffer alive until the V8
73 // engine garbage collects it.
74 String plain_string_;
75 // If this string is atomic or has been made atomic earlier the
76 // atomic string is held here. In the case where the string starts
77 // off non-atomic and becomes atomic later it is necessary to keep
78 // the original string alive because v8 may keep derived pointers
79 // into that string.
80 AtomicString atomic_string_;
81
82 private:
83 #if DCHECK_IS_ON()
84 WTF::ThreadIdentifier thread_id_;
85 #endif
86 };
87
88 class StringResource16 final : public StringResourceBase,
89 public v8::String::ExternalStringResource {
90 WTF_MAKE_NONCOPYABLE(StringResource16);
91
92 public:
93 explicit StringResource16(const String& string) : StringResourceBase(string) {
94 DCHECK(!string.Is8Bit());
95 }
96
97 explicit StringResource16(const AtomicString& string)
98 : StringResourceBase(string) {
99 DCHECK(!string.Is8Bit());
100 }
101
102 size_t length() const override { return plain_string_.Impl()->length(); }
103 const uint16_t* data() const override {
104 return reinterpret_cast<const uint16_t*>(
105 plain_string_.Impl()->Characters16());
106 }
107 };
108
109 class StringResource8 final : public StringResourceBase,
110 public v8::String::ExternalOneByteStringResource {
111 WTF_MAKE_NONCOPYABLE(StringResource8);
112
113 public:
114 explicit StringResource8(const String& string) : StringResourceBase(string) {
115 DCHECK(string.Is8Bit());
116 }
117
118 explicit StringResource8(const AtomicString& string)
119 : StringResourceBase(string) {
120 DCHECK(string.Is8Bit());
121 }
122
123 size_t length() const override { return plain_string_.Impl()->length(); }
124 const char* data() const override {
125 return reinterpret_cast<const char*>(plain_string_.Impl()->Characters8());
126 }
127 };
128
129 enum ExternalMode { kExternalize, kDoNotExternalize };
130
131 template <typename StringType>
132 CORE_EXPORT StringType V8StringToWebCoreString(v8::Local<v8::String>,
133 ExternalMode);
134 CORE_EXPORT String Int32ToWebCoreString(int value);
135
136 } // namespace blink
137
138 #endif // StringResource_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698