| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 } | 68 } |
| 69 | 69 |
| 70 ScriptValue() {} | 70 ScriptValue() {} |
| 71 | 71 |
| 72 ScriptValue(ScriptState* script_state, v8::Local<v8::Value> value) | 72 ScriptValue(ScriptState* script_state, v8::Local<v8::Value> value) |
| 73 : script_state_(script_state), | 73 : script_state_(script_state), |
| 74 value_(value.IsEmpty() ? nullptr | 74 value_(value.IsEmpty() ? nullptr |
| 75 : SharedPersistent<v8::Value>::Create( | 75 : SharedPersistent<v8::Value>::Create( |
| 76 value, | 76 value, |
| 77 script_state->GetIsolate())) { | 77 script_state->GetIsolate())) { |
| 78 ASSERT(IsEmpty() || script_state_); | 78 DCHECK(IsEmpty() || script_state_); |
| 79 } | 79 } |
| 80 | 80 |
| 81 template <typename T> | 81 template <typename T> |
| 82 ScriptValue(ScriptState* script_state, v8::MaybeLocal<T> value) | 82 ScriptValue(ScriptState* script_state, v8::MaybeLocal<T> value) |
| 83 : script_state_(script_state), | 83 : script_state_(script_state), |
| 84 value_(value.IsEmpty() ? nullptr | 84 value_(value.IsEmpty() ? nullptr |
| 85 : SharedPersistent<v8::Value>::Create( | 85 : SharedPersistent<v8::Value>::Create( |
| 86 value.ToLocalChecked(), | 86 value.ToLocalChecked(), |
| 87 script_state->GetIsolate())) { | 87 script_state->GetIsolate())) { |
| 88 ASSERT(IsEmpty() || script_state_); | 88 DCHECK(IsEmpty() || script_state_); |
| 89 } | 89 } |
| 90 | 90 |
| 91 ScriptValue(const ScriptValue& value) | 91 ScriptValue(const ScriptValue& value) |
| 92 : script_state_(value.script_state_), value_(value.value_) { | 92 : script_state_(value.script_state_), value_(value.value_) { |
| 93 ASSERT(IsEmpty() || script_state_); | 93 DCHECK(IsEmpty() || script_state_); |
| 94 } | 94 } |
| 95 | 95 |
| 96 ScriptState* GetScriptState() const { return script_state_.Get(); } | 96 ScriptState* GetScriptState() const { return script_state_.Get(); } |
| 97 | 97 |
| 98 v8::Isolate* GetIsolate() const { | 98 v8::Isolate* GetIsolate() const { |
| 99 return script_state_ ? script_state_->GetIsolate() | 99 return script_state_ ? script_state_->GetIsolate() |
| 100 : v8::Isolate::GetCurrent(); | 100 : v8::Isolate::GetCurrent(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 v8::Local<v8::Context> GetContext() const { | 103 v8::Local<v8::Context> GetContext() const { |
| 104 ASSERT(script_state_.Get()); | 104 DCHECK(script_state_.Get()); |
| 105 return script_state_->GetContext(); | 105 return script_state_->GetContext(); |
| 106 } | 106 } |
| 107 | 107 |
| 108 ScriptValue& operator=(const ScriptValue& value) { | 108 ScriptValue& operator=(const ScriptValue& value) { |
| 109 if (this != &value) { | 109 if (this != &value) { |
| 110 script_state_ = value.script_state_; | 110 script_state_ = value.script_state_; |
| 111 value_ = value.value_; | 111 value_ = value.value_; |
| 112 } | 112 } |
| 113 return *this; | 113 return *this; |
| 114 } | 114 } |
| 115 | 115 |
| 116 bool operator==(const ScriptValue& value) const { | 116 bool operator==(const ScriptValue& value) const { |
| 117 if (IsEmpty()) | 117 if (IsEmpty()) |
| 118 return value.IsEmpty(); | 118 return value.IsEmpty(); |
| 119 if (value.IsEmpty()) | 119 if (value.IsEmpty()) |
| 120 return false; | 120 return false; |
| 121 return *value_ == *value.value_; | 121 return *value_ == *value.value_; |
| 122 } | 122 } |
| 123 | 123 |
| 124 bool operator!=(const ScriptValue& value) const { return !operator==(value); } | 124 bool operator!=(const ScriptValue& value) const { return !operator==(value); } |
| 125 | 125 |
| 126 // This creates a new local Handle; Don't use this in performance-sensitive | 126 // This creates a new local Handle; Don't use this in performance-sensitive |
| 127 // places. | 127 // places. |
| 128 bool IsFunction() const { | 128 bool IsFunction() const { |
| 129 ASSERT(!IsEmpty()); | 129 DCHECK(!IsEmpty()); |
| 130 v8::Local<v8::Value> value = V8Value(); | 130 v8::Local<v8::Value> value = V8Value(); |
| 131 return !value.IsEmpty() && value->IsFunction(); | 131 return !value.IsEmpty() && value->IsFunction(); |
| 132 } | 132 } |
| 133 | 133 |
| 134 // This creates a new local Handle; Don't use this in performance-sensitive | 134 // This creates a new local Handle; Don't use this in performance-sensitive |
| 135 // places. | 135 // places. |
| 136 bool IsNull() const { | 136 bool IsNull() const { |
| 137 ASSERT(!IsEmpty()); | 137 DCHECK(!IsEmpty()); |
| 138 v8::Local<v8::Value> value = V8Value(); | 138 v8::Local<v8::Value> value = V8Value(); |
| 139 return !value.IsEmpty() && value->IsNull(); | 139 return !value.IsEmpty() && value->IsNull(); |
| 140 } | 140 } |
| 141 | 141 |
| 142 // This creates a new local Handle; Don't use this in performance-sensitive | 142 // This creates a new local Handle; Don't use this in performance-sensitive |
| 143 // places. | 143 // places. |
| 144 bool IsUndefined() const { | 144 bool IsUndefined() const { |
| 145 ASSERT(!IsEmpty()); | 145 DCHECK(!IsEmpty()); |
| 146 v8::Local<v8::Value> value = V8Value(); | 146 v8::Local<v8::Value> value = V8Value(); |
| 147 return !value.IsEmpty() && value->IsUndefined(); | 147 return !value.IsEmpty() && value->IsUndefined(); |
| 148 } | 148 } |
| 149 | 149 |
| 150 // This creates a new local Handle; Don't use this in performance-sensitive | 150 // This creates a new local Handle; Don't use this in performance-sensitive |
| 151 // places. | 151 // places. |
| 152 bool IsObject() const { | 152 bool IsObject() const { |
| 153 ASSERT(!IsEmpty()); | 153 DCHECK(!IsEmpty()); |
| 154 v8::Local<v8::Value> value = V8Value(); | 154 v8::Local<v8::Value> value = V8Value(); |
| 155 return !value.IsEmpty() && value->IsObject(); | 155 return !value.IsEmpty() && value->IsObject(); |
| 156 } | 156 } |
| 157 | 157 |
| 158 bool IsEmpty() const { return !value_.Get() || value_->IsEmpty(); } | 158 bool IsEmpty() const { return !value_.Get() || value_->IsEmpty(); } |
| 159 | 159 |
| 160 void Clear() { value_ = nullptr; } | 160 void Clear() { value_ = nullptr; } |
| 161 | 161 |
| 162 v8::Local<v8::Value> V8Value() const; | 162 v8::Local<v8::Value> V8Value() const; |
| 163 // Returns v8Value() if a given ScriptState is the same as the | 163 // Returns v8Value() if a given ScriptState is the same as the |
| 164 // ScriptState which is associated with this ScriptValue. Otherwise | 164 // ScriptState which is associated with this ScriptValue. Otherwise |
| 165 // this "clones" the v8 value and returns it. | 165 // this "clones" the v8 value and returns it. |
| 166 v8::Local<v8::Value> V8ValueFor(ScriptState*) const; | 166 v8::Local<v8::Value> V8ValueFor(ScriptState*) const; |
| 167 | 167 |
| 168 bool ToString(String&) const; | 168 bool ToString(String&) const; |
| 169 | 169 |
| 170 static ScriptValue CreateNull(ScriptState*); | 170 static ScriptValue CreateNull(ScriptState*); |
| 171 | 171 |
| 172 private: | 172 private: |
| 173 RefPtr<ScriptState> script_state_; | 173 RefPtr<ScriptState> script_state_; |
| 174 RefPtr<SharedPersistent<v8::Value>> value_; | 174 RefPtr<SharedPersistent<v8::Value>> value_; |
| 175 }; | 175 }; |
| 176 | 176 |
| 177 } // namespace blink | 177 } // namespace blink |
| 178 | 178 |
| 179 #endif // ScriptValue_h | 179 #endif // ScriptValue_h |
| OLD | NEW |