PassRefPtr<DataTransferItemList> Clipboard::items() { PassRefPtr<DataObjectGtk> dataObject = m_pasteboard->dataObject(); return dataObject.get()->itemList(); }
bool IDBRequest::dispatchEvent(PassRefPtr<Event> event) { LOG(StorageAPI, "IDBRequest::dispatchEvent"); ASSERT(m_readyState == PENDING); ASSERT(!m_contextStopped); ASSERT(m_hasPendingActivity); ASSERT(m_enqueuedEvents.size()); ASSERT(scriptExecutionContext()); ASSERT(event->target() == this); ASSERT_WITH_MESSAGE(m_readyState < DONE, "When dispatching event %s, m_readyState < DONE(%d), was %d", event->type().string().utf8().data(), DONE, m_readyState); DOMRequestState::Scope scope(m_requestState); if (event->type() != eventNames().blockedEvent) m_readyState = DONE; for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) { if (m_enqueuedEvents[i].get() == event.get()) m_enqueuedEvents.remove(i); } Vector<RefPtr<EventTarget>> targets; targets.append(this); if (m_transaction && !m_preventPropagation) { targets.append(m_transaction); // If there ever are events that are associated with a database but // that do not have a transaction, then this will not work and we need // this object to actually hold a reference to the database (to ensure // it stays alive). targets.append(m_transaction->db()); } // Cursor properties should not updated until the success event is being dispatched. RefPtr<IDBCursor> cursorToNotify; if (event->type() == eventNames().successEvent) { cursorToNotify = getResultCursor(); if (cursorToNotify) { cursorToNotify->setValueReady(requestState(), m_cursorKey.release(), m_cursorPrimaryKey.release(), m_cursorValue); m_cursorValue.clear(); } } if (event->type() == eventNames().upgradeneededEvent) { ASSERT(!m_didFireUpgradeNeededEvent); m_didFireUpgradeNeededEvent = true; } // FIXME: When we allow custom event dispatching, this will probably need to change. ASSERT_WITH_MESSAGE(event->type() == eventNames().successEvent || event->type() == eventNames().errorEvent || event->type() == eventNames().blockedEvent || event->type() == eventNames().upgradeneededEvent, "event type was %s", event->type().string().utf8().data()); const bool setTransactionActive = m_transaction && (event->type() == eventNames().successEvent || event->type() == eventNames().upgradeneededEvent || (event->type() == eventNames().errorEvent && m_errorCode != IDBDatabaseException::AbortError)); if (setTransactionActive) m_transaction->setActive(true); bool dontPreventDefault = IDBEventDispatcher::dispatch(event.get(), targets); if (m_transaction) { if (m_readyState == DONE) m_transaction->unregisterRequest(this); // Possibly abort the transaction. This must occur after unregistering (so this request // doesn't receive a second error) and before deactivating (which might trigger commit). if (event->type() == eventNames().errorEvent && dontPreventDefault && !m_requestAborted) { m_transaction->setError(m_error, m_errorMessage); m_transaction->abort(IGNORE_EXCEPTION); } // If this was the last request in the transaction's list, it may commit here. if (setTransactionActive) m_transaction->setActive(false); } if (cursorToNotify) cursorToNotify->postSuccessHandlerCallback(); if (m_readyState == DONE && (!cursorToNotify || m_cursorFinished) && event->type() != eventNames().upgradeneededEvent) m_hasPendingActivity = false; return dontPreventDefault; }
v8::Handle<v8::Value> toV8(PassRefPtr<V8SVGPODTypeWrapper<FloatRect> > impl) { return toV8(impl.get()); }
v8::Handle<v8::Value> toV8(PassRefPtr<CanvasPattern > impl) { return toV8(impl.get()); }
void ImageFrameGenerator::setData(PassRefPtr<SharedBuffer> data, bool allDataReceived) { m_data->setData(data.get(), allDataReceived); }
void HTMLFormattingElementList::append(PassRefPtr<HTMLStackItem> item) { ensureNoahsArkCondition(item.get()); m_entries.append(item); }
Deprecated::ScriptValue idbKeyToScriptValue(DOMRequestState* requestState, PassRefPtr<IDBKey> key) { ExecState* exec = requestState->exec(); return Deprecated::ScriptValue(exec->vm(), idbKeyToJSValue(exec, jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), key.get())); }
v8::Handle<v8::Value> toV8(PassRefPtr<SVGExternalResourcesRequired > impl) { return toV8(impl.get()); }
v8::Handle<v8::Value> toV8(PassRefPtr<Screen > impl) { return toV8(impl.get()); }
bool EventTargetNode::dispatchMouseEvent(const AtomicString& eventType, int button, int detail, int pageX, int pageY, int screenX, int screenY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool isSimulated, Node* relatedTargetArg, PassRefPtr<Event> underlyingEvent) { ASSERT(!eventDispatchForbidden()); if (disabled()) // Don't even send DOM events for disabled controls.. return true; if (eventType.isEmpty()) return false; // Shouldn't happen. // Dispatching the first event can easily result in this node being destroyed. // Since we dispatch up to three events here, we need to make sure we're referenced // so the pointer will be good for the two subsequent ones. RefPtr<Node> protect(this); bool cancelable = eventType != eventNames().mousemoveEvent; ExceptionCode ec = 0; bool swallowEvent = false; // Attempting to dispatch with a non-EventTarget relatedTarget causes the relatedTarget to be silently ignored. RefPtr<EventTargetNode> relatedTarget = (relatedTargetArg && relatedTargetArg->isEventTargetNode()) ? static_cast<EventTargetNode*>(relatedTargetArg) : 0; if (Frame* frame = document()->frame()) { float pageZoom = frame->pageZoomFactor(); if (pageZoom != 1.0f) { // Adjust our pageX and pageY to account for the page zoom. pageX = lroundf(pageX / pageZoom); pageY = lroundf(pageY / pageZoom); } } RefPtr<Event> mouseEvent = MouseEvent::create(eventType, true, cancelable, document()->defaultView(), detail, screenX, screenY, pageX, pageY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, 0, isSimulated); mouseEvent->setUnderlyingEvent(underlyingEvent.get()); dispatchEvent(mouseEvent, ec); bool defaultHandled = mouseEvent->defaultHandled(); bool defaultPrevented = mouseEvent->defaultPrevented(); if (defaultHandled || defaultPrevented) swallowEvent = true; // Special case: If it's a double click event, we also send the dblclick event. This is not part // of the DOM specs, but is used for compatibility with the ondblclick="" attribute. This is treated // as a separate event in other DOM-compliant browsers like Firefox, and so we do the same. if (eventType == eventNames().clickEvent && detail == 2) { RefPtr<Event> doubleClickEvent = MouseEvent::create(eventNames().dblclickEvent, true, cancelable, document()->defaultView(), detail, screenX, screenY, pageX, pageY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, 0, isSimulated); doubleClickEvent->setUnderlyingEvent(underlyingEvent.get()); if (defaultHandled) doubleClickEvent->setDefaultHandled(); dispatchEvent(doubleClickEvent, ec); if (doubleClickEvent->defaultHandled() || doubleClickEvent->defaultPrevented()) swallowEvent = true; } return swallowEvent; }
v8::Handle<v8::Value> toV8(PassRefPtr<SVGFECompositeElement > impl) { return toV8(impl.get()); }
bool IDBRequest::dispatchEvent(PassRefPtr<Event> event) { IDB_TRACE("IDBRequest::dispatchEvent"); if (m_contextStopped || !executionContext()) return false; ASSERT(m_requestState.isValid()); ASSERT(m_readyState == PENDING); ASSERT(m_hasPendingActivity); ASSERT(m_enqueuedEvents.size()); ASSERT(event->target() == this); DOMRequestState::Scope scope(m_requestState); if (event->type() != EventTypeNames::blocked) m_readyState = DONE; dequeueEvent(event.get()); Vector<RefPtr<EventTarget> > targets; targets.append(this); if (m_transaction && !m_preventPropagation) { targets.append(m_transaction); // If there ever are events that are associated with a database but // that do not have a transaction, then this will not work and we need // this object to actually hold a reference to the database (to ensure // it stays alive). targets.append(m_transaction->db()); } // Cursor properties should not be updated until the success event is being dispatched. RefPtr<IDBCursor> cursorToNotify; if (event->type() == EventTypeNames::success) { cursorToNotify = getResultCursor(); if (cursorToNotify) cursorToNotify->setValueReady(m_cursorKey.release(), m_cursorPrimaryKey.release(), m_cursorValue.release()); } if (event->type() == EventTypeNames::upgradeneeded) { ASSERT(!m_didFireUpgradeNeededEvent); m_didFireUpgradeNeededEvent = true; } // FIXME: When we allow custom event dispatching, this will probably need to change. ASSERT_WITH_MESSAGE(event->type() == EventTypeNames::success || event->type() == EventTypeNames::error || event->type() == EventTypeNames::blocked || event->type() == EventTypeNames::upgradeneeded, "event type was %s", event->type().string().utf8().data()); const bool setTransactionActive = m_transaction && (event->type() == EventTypeNames::success || event->type() == EventTypeNames::upgradeneeded || (event->type() == EventTypeNames::error && !m_requestAborted)); if (setTransactionActive) m_transaction->setActive(true); bool dontPreventDefault = IDBEventDispatcher::dispatch(event.get(), targets); if (m_transaction) { if (m_readyState == DONE) m_transaction->unregisterRequest(this); // Possibly abort the transaction. This must occur after unregistering (so this request // doesn't receive a second error) and before deactivating (which might trigger commit). if (event->type() == EventTypeNames::error && dontPreventDefault && !m_requestAborted) { m_transaction->setError(m_error); m_transaction->abort(IGNORE_EXCEPTION); } // If this was the last request in the transaction's list, it may commit here. if (setTransactionActive) m_transaction->setActive(false); } if (cursorToNotify) cursorToNotify->postSuccessHandlerCallback(); // An upgradeneeded event will always be followed by a success or error event, so must // be kept alive. if (m_readyState == DONE && event->type() != EventTypeNames::upgradeneeded) m_hasPendingActivity = false; return dontPreventDefault; }
inline void XMLTreeBuilder::add(PassRefPtr<Node> node) { m_currentNodeStack.last().node()->parserAddChild(node.get()); if (!node->attached()) node->attach(); }
v8::Handle<v8::Value> toV8(PassRefPtr<SQLResultSet > impl) { return toV8(impl.get()); }
v8::Handle<v8::Value> toV8(PassRefPtr<DOMParser > impl) { return toV8(impl.get()); }
v8::Handle<v8::Value> toV8(PassRefPtr<SVGMissingGlyphElement > impl) { return toV8(impl.get()); }
HTMLFormCollection::HTMLFormCollection(PassRefPtr<HTMLFormElement> form) : HTMLCollection(form.get(), Other, formCollectionInfo(form.get())) { }
v8::Handle<v8::Value> toV8(PassRefPtr<FileList > impl) { return toV8(impl.get()); }
bool injectIDBKeyIntoScriptValue(DOMRequestState* requestState, PassRefPtr<IDBKey> key, Deprecated::ScriptValue& value, const IDBKeyPath& keyPath) { LOG(StorageAPI, "injectIDBKeyIntoScriptValue"); ASSERT(keyPath.type() == IDBKeyPath::StringType); Vector<String> keyPathElements; IDBKeyPathParseError error; IDBParseKeyPath(keyPath.string(), keyPathElements, error); ASSERT(error == IDBKeyPathParseErrorNone); if (keyPathElements.isEmpty()) return false; ExecState* exec = requestState->exec(); JSValue parent = ensureNthValueOnKeyPath(exec, value.jsValue(), keyPathElements, keyPathElements.size() - 1); if (parent.isUndefined()) return false; if (!set(exec, parent, keyPathElements.last(), idbKeyToJSValue(exec, jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), key.get()))) return false; return true; }
v8::Handle<v8::Value> toV8(PassRefPtr<Clipboard > impl) { return toV8(impl.get()); }
static void callTransactionErrorCallback(ScriptExecutionContext*, PassRefPtr<SQLTransactionErrorCallback> callback, PassRefPtr<SQLError> error) { callback->handleEvent(error.get()); }
PassRefPtr<DatabaseSync> DatabaseSync::create(ScriptExecutionContext*, PassRefPtr<DatabaseBackendBase> backend) { return static_cast<DatabaseSync*>(backend.get()); }
v8::Handle<v8::Value> toV8(PassRefPtr<HTMLAreaElement > impl) { return toV8(impl.get()); }
bool ContainerNode::insertBefore(PassRefPtr<Node> newChild, Node* refChild, ExceptionCode& ec, AttachBehavior attachBehavior) { // Check that this node is not "floating". // If it is, it can be deleted as a side effect of sending mutation events. ASSERT(refCount() || parentOrShadowHostNode()); RefPtr<Node> protect(this); ec = 0; // insertBefore(node, 0) is equivalent to appendChild(node) if (!refChild) return appendChild(newChild, ec, attachBehavior); // Make sure adding the new child is OK. if (!checkAddChild(this, newChild.get(), ec)) return false; // NOT_FOUND_ERR: Raised if refChild is not a child of this node if (refChild->parentNode() != this) { ec = NOT_FOUND_ERR; return false; } if (refChild->previousSibling() == newChild || refChild == newChild) // nothing to do return true; RefPtr<Node> next = refChild; NodeVector targets; collectChildrenAndRemoveFromOldParent(newChild.get(), targets, ec); if (ec) return false; if (targets.isEmpty()) return true; // We need this extra check because collectChildrenAndRemoveFromOldParent() can fire mutation events. if (!checkAcceptChildGuaranteedNodeTypes(this, newChild.get(), ec)) return false; InspectorInstrumentation::willInsertDOMNode(document(), this); ChildListMutationScope mutation(this); for (NodeVector::const_iterator it = targets.begin(); it != targets.end(); ++it) { Node* child = it->get(); // Due to arbitrary code running in response to a DOM mutation event it's // possible that "next" is no longer a child of "this". // It's also possible that "child" has been inserted elsewhere. // In either of those cases, we'll just stop. if (next->parentNode() != this) break; if (child->parentNode()) break; treeScope()->adoptIfNeeded(child); insertBeforeCommon(next.get(), child); updateTreeAfterInsertion(this, child, attachBehavior); } dispatchSubtreeModifiedEvent(); return true; }
void SVGResourceFilter::addFilterEffect(SVGFilterPrimitiveStandardAttributes* effectAttributes, PassRefPtr<FilterEffect> effect) { effectAttributes->setStandardAttributes(this, effect.get()); builder()->add(effectAttributes->result(), effect); }
bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, ExceptionCode& ec, AttachBehavior attachBehavior) { // Check that this node is not "floating". // If it is, it can be deleted as a side effect of sending mutation events. ASSERT(refCount() || parentOrShadowHostNode()); RefPtr<Node> protect(this); ec = 0; if (oldChild == newChild) // nothing to do return true; if (!oldChild) { ec = NOT_FOUND_ERR; return false; } // Make sure replacing the old child with the new is ok if (!checkReplaceChild(this, newChild.get(), oldChild, ec)) return false; // NOT_FOUND_ERR: Raised if oldChild is not a child of this node. if (oldChild->parentNode() != this) { ec = NOT_FOUND_ERR; return false; } ChildListMutationScope mutation(this); RefPtr<Node> next = oldChild->nextSibling(); // Remove the node we're replacing RefPtr<Node> removedChild = oldChild; removeChild(oldChild, ec); if (ec) return false; if (next && (next->previousSibling() == newChild || next == newChild)) // nothing to do return true; // Does this one more time because removeChild() fires a MutationEvent. if (!checkReplaceChild(this, newChild.get(), oldChild, ec)) return false; NodeVector targets; collectChildrenAndRemoveFromOldParent(newChild.get(), targets, ec); if (ec) return false; // Does this yet another check because collectChildrenAndRemoveFromOldParent() fires a MutationEvent. if (!checkReplaceChild(this, newChild.get(), oldChild, ec)) return false; InspectorInstrumentation::willInsertDOMNode(document(), this); // Add the new child(ren) for (NodeVector::const_iterator it = targets.begin(); it != targets.end(); ++it) { Node* child = it->get(); // Due to arbitrary code running in response to a DOM mutation event it's // possible that "next" is no longer a child of "this". // It's also possible that "child" has been inserted elsewhere. // In either of those cases, we'll just stop. if (next && next->parentNode() != this) break; if (child->parentNode()) break; treeScope()->adoptIfNeeded(child); // Add child before "next". { NoEventDispatchAssertion assertNoEventDispatch; if (next) insertBeforeCommon(next.get(), child); else appendChildToContainer(child, this); } updateTreeAfterInsertion(this, child, attachBehavior); } dispatchSubtreeModifiedEvent(); return true; }
void SVGElementInstance::appendChild(PassRefPtr<SVGElementInstance> child) { appendChildToContainer<SVGElementInstance, SVGElementInstance>(child.get(), this); }
v8::Handle<v8::Value> toV8(PassRefPtr<CSSVariablesDeclaration > impl) { return toV8(impl.get()); }
static JSValue finishSetter(ExecState* exec, ExceptionCode& ec, SVGElement* context, SVGTransformList* list, PassRefPtr<PODListItem> item) { if (ec) { setDOMException(exec, ec); return jsUndefined(); } const QualifiedName& attributeName = list->associatedAttributeName(); context->svgAttributeChanged(attributeName); return toJS(exec, deprecatedGlobalObjectForPrototype(exec), JSSVGPODTypeWrapperCreatorForList<SVGTransform>::create(item.get(), attributeName).get(), context); }
void RealtimeMediaSourceCenterMac::createMediaStream(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints) { RefPtr<MediaStreamCreationClient> client = prpQueryClient; ASSERT(client); Vector<RefPtr<RealtimeMediaSource>> audioSources; Vector<RefPtr<RealtimeMediaSource>> videoSources; if (audioConstraints) { String invalidConstraint; AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Audio, audioConstraints.get(), invalidConstraint); if (!invalidConstraint.isEmpty()) { client->failedToCreateStreamWithConstraintsError(invalidConstraint); return; } // FIXME: Consider the constraints when choosing among multiple devices. For now just select the first available // device of the appropriate type. RefPtr<RealtimeMediaSource> audioSource = AVCaptureDeviceManager::singleton().bestSourcesForTypeAndConstraints(RealtimeMediaSource::Audio, audioConstraints.get()).at(0); ASSERT(audioSource); audioSources.append(audioSource.release()); } if (videoConstraints) { String invalidConstraint; AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Video, videoConstraints.get(), invalidConstraint); if (!invalidConstraint.isEmpty()) { client->failedToCreateStreamWithConstraintsError(invalidConstraint); return; } // FIXME: Consider the constraints when choosing among multiple devices. For now just select the first available // device of the appropriate type. RefPtr<RealtimeMediaSource> videoSource = AVCaptureDeviceManager::singleton().bestSourcesForTypeAndConstraints(RealtimeMediaSource::Video, videoConstraints.get()).at(0); ASSERT(videoSource); videoSources.append(videoSource.release()); } client->didCreateStream(MediaStreamPrivate::create(audioSources, videoSources)); }