Index: third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp |
index c1f74c4286e808879c9edb1af455d55690c9cafd..65d5796c042b88751e32c60eb7d3dc3f3e554f97 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp |
@@ -116,7 +116,8 @@ public: |
v8::Local<v8::Object> wrapper = v8::Local<v8::Object>::New(m_isolate, v8::Persistent<v8::Object>::Cast(*value)); |
ASSERT(V8DOMWrapper::hasInternalFieldsSet(wrapper)); |
- if (toWrapperTypeInfo(wrapper)->hasPendingActivity(wrapper)) { |
+ if (toWrapperTypeInfo(wrapper)->isActiveScriptWrappable() |
+ && toScriptWrappable(wrapper)->hasPendingActivity()) { |
v8::Persistent<v8::Object>::Cast(*value).MarkActive(); |
return; |
} |
@@ -157,22 +158,19 @@ public: |
if (classId != WrapperTypeInfo::NodeClassId && classId != WrapperTypeInfo::ObjectClassId) |
return; |
+ if (value->IsIndependent()) |
+ return; |
+ |
v8::Local<v8::Object> wrapper = v8::Local<v8::Object>::New(m_isolate, v8::Persistent<v8::Object>::Cast(*value)); |
- ASSERT(V8DOMWrapper::hasInternalFieldsSet(wrapper)); |
+ DCHECK(V8DOMWrapper::hasInternalFieldsSet(wrapper)); |
const WrapperTypeInfo* type = toWrapperTypeInfo(wrapper); |
- if (type->hasPendingActivity(wrapper)) { |
- // If you hit this assert, you'll need to add a [DependentiLifetime] |
- // extended attribute to the DOM interface. A DOM interface that |
- // overrides hasPendingActivity must be marked as [DependentLifetime]. |
- RELEASE_ASSERT(!value->IsIndependent()); |
+ if (type->isActiveScriptWrappable() |
+ && toScriptWrappable(wrapper)->hasPendingActivity()) { |
m_isolate->SetObjectGroupId(*value, liveRootId()); |
++m_domObjectsWithPendingActivity; |
} |
- if (value->IsIndependent()) |
- return; |
- |
if (classId == WrapperTypeInfo::NodeClassId) { |
DCHECK(V8Node::hasInstance(wrapper, m_isolate)); |
Node* node = V8Node::toImpl(wrapper); |
@@ -185,7 +183,7 @@ public: |
} else if (classId == WrapperTypeInfo::ObjectClassId) { |
type->visitDOMWrapper(m_isolate, toScriptWrappable(wrapper), v8::Persistent<v8::Object>::Cast(*value)); |
} else { |
- ASSERT_NOT_REACHED(); |
+ NOTREACHED(); |
} |
} |
@@ -457,7 +455,8 @@ public: |
v8::Local<v8::Object> wrapper = v8::Local<v8::Object>::New(m_isolate, v8::Persistent<v8::Object>::Cast(*value)); |
ASSERT(V8DOMWrapper::hasInternalFieldsSet(wrapper)); |
// The ExecutionContext check is heavy, so it should be done at the last. |
- if (toWrapperTypeInfo(wrapper)->hasPendingActivity(wrapper) |
+ if (toWrapperTypeInfo(wrapper)->isActiveScriptWrappable() |
+ && toScriptWrappable(wrapper)->hasPendingActivity() |
// TODO(haraken): Currently we don't have a way to get a creation |
// context from a wrapper. We should implement the way and enable |
// the following condition. |