BisonCSSParser::RuleList* BisonCSSParser::createRuleList() { OwnPtrWillBeRawPtr<RuleList> list = adoptPtrWillBeNoop(new RuleList); RuleList* listPtr = list.get(); m_parsedRuleLists.append(list.release()); return listPtr; }
TEST_F(AnimationLengthStyleInterpolationTest, MultipleUnits) { CSSLengthArray actual, expectation; initLengthArray(expectation); OwnPtrWillBeRawPtr<InterpolableList> list = createInterpolableLength(0, 10, 0, 10, 0, 10, 0, 10, 0, 10); toCSSPrimitiveValue(interpolableValueToLength(list.get(), ValueRangeAll).get())->accumulateLengthArray(expectation); EXPECT_TRUE(lengthArraysEqual(expectation, setLengthArray(actual, "calc(10%% + 10ex + 10ch + 10vh + 10vmax)"))); }
void ScopedStyleResolver::addTreeBoundaryCrossingRules(const RuleSet& authorRules, CSSStyleSheet* parentStyleSheet, unsigned sheetIndex) { bool isDocumentScope = treeScope().rootNode().isDocumentNode(); if (authorRules.treeBoundaryCrossingRules().isEmpty() && (isDocumentScope || authorRules.shadowDistributedRules().isEmpty())) return; OwnPtrWillBeRawPtr<RuleSet> ruleSetForScope = RuleSet::create(); addRules(ruleSetForScope.get(), authorRules.treeBoundaryCrossingRules()); if (!isDocumentScope) addRules(ruleSetForScope.get(), authorRules.shadowDistributedRules()); if (!m_treeBoundaryCrossingRuleSet) { m_treeBoundaryCrossingRuleSet = adoptPtrWillBeNoop(new CSSStyleSheetRuleSubSet()); treeScope().document().styleResolver()->addTreeBoundaryCrossingScope(treeScope().rootNode()); } m_treeBoundaryCrossingRuleSet->append(RuleSubSet::create(parentStyleSheet, sheetIndex, ruleSetForScope.release())); }
TEST_F(ScriptRunnerTest, QueueSingleScript_InOrder) { OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader = MockScriptLoader::create(m_element.get()); m_scriptRunner->queueScriptForExecution(scriptLoader.get(), ScriptRunner::IN_ORDER_EXECUTION); m_scriptRunner->resume(); EXPECT_CALL(*scriptLoader, isReady()).WillOnce(Return(true)); EXPECT_CALL(*scriptLoader, execute()); m_platform.runAllTasks(); }
InspectorController::InspectorController(Page* page, InspectorClient* inspectorClient) : m_instrumentingAgents(InstrumentingAgents::create()) , m_injectedScriptManager(InjectedScriptManager::createForPage()) , m_state(adoptPtrWillBeNoop(new InspectorCompositeState(inspectorClient))) , m_overlay(InspectorOverlay::create(page, inspectorClient)) , m_cssAgent(nullptr) , m_resourceAgent(nullptr) , m_layerTreeAgent(nullptr) , m_inspectorFrontendClient(nullptr) , m_page(page) , m_inspectorClient(inspectorClient) , m_agents(m_instrumentingAgents.get(), m_state.get()) , m_isUnderTest(false) , m_deferredAgentsInitialized(false) { InjectedScriptManager* injectedScriptManager = m_injectedScriptManager.get(); InspectorOverlay* overlay = m_overlay.get(); m_agents.append(InspectorInspectorAgent::create(m_page, injectedScriptManager)); OwnPtrWillBeRawPtr<InspectorPageAgent> pageAgentPtr(InspectorPageAgent::create(m_page, injectedScriptManager, inspectorClient, overlay)); m_pageAgent = pageAgentPtr.get(); m_agents.append(pageAgentPtr.release()); OwnPtrWillBeRawPtr<InspectorDOMAgent> domAgentPtr(InspectorDOMAgent::create(m_pageAgent, injectedScriptManager, overlay)); m_domAgent = domAgentPtr.get(); m_agents.append(domAgentPtr.release()); OwnPtrWillBeRawPtr<InspectorLayerTreeAgent> layerTreeAgentPtr(InspectorLayerTreeAgent::create(m_page)); m_layerTreeAgent = layerTreeAgentPtr.get(); m_agents.append(layerTreeAgentPtr.release()); OwnPtrWillBeRawPtr<InspectorWorkerAgent> workerAgentPtr = InspectorWorkerAgent::create(); OwnPtrWillBeRawPtr<InspectorTracingAgent> tracingAgentPtr = InspectorTracingAgent::create(inspectorClient, workerAgentPtr.get()); m_tracingAgent = tracingAgentPtr.get(); m_agents.append(tracingAgentPtr.release()); m_agents.append(workerAgentPtr.release()); OwnPtrWillBeRawPtr<InspectorTimelineAgent> timelineAgentPtr(InspectorTimelineAgent::create(m_pageAgent, m_layerTreeAgent, overlay, InspectorTimelineAgent::PageInspector, inspectorClient)); m_timelineAgent = timelineAgentPtr.get(); m_agents.append(timelineAgentPtr.release()); PageScriptDebugServer* pageScriptDebugServer = &PageScriptDebugServer::shared(); m_agents.append(PageRuntimeAgent::create(injectedScriptManager, inspectorClient, pageScriptDebugServer, m_page, m_pageAgent)); m_agents.append(PageConsoleAgent::create(injectedScriptManager, m_domAgent, m_timelineAgent, m_page)); ASSERT_ARG(inspectorClient, inspectorClient); m_injectedScriptManager->injectedScriptHost()->init(m_instrumentingAgents.get(), pageScriptDebugServer); }
void V8Window::postMessageMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info) { ExceptionState exceptionState(ExceptionState::ExecutionContext, "postMessage", "Window", info.Holder(), info.GetIsolate()); if (UNLIKELY(info.Length() < 2)) { setMinimumArityTypeError(exceptionState, 2, info.Length()); exceptionState.throwIfNeeded(); return; } // None of these need to be RefPtr because info and context are guaranteed // to hold on to them. DOMWindow* window = V8Window::toImpl(info.Holder()); LocalDOMWindow* source = callingDOMWindow(info.GetIsolate()); ASSERT(window); UseCounter::countIfNotPrivateScript(info.GetIsolate(), window->frame(), UseCounter::WindowPostMessage); // If called directly by WebCore we don't have a calling context. if (!source) { exceptionState.throwTypeError("No active calling context exists."); exceptionState.throwIfNeeded(); return; } // This function has variable arguments and can be: // Per current spec: // postMessage(message, targetOrigin) // postMessage(message, targetOrigin, {sequence of transferrables}) // Legacy non-standard implementations in webkit allowed: // postMessage(message, {sequence of transferrables}, targetOrigin); OwnPtrWillBeRawPtr<MessagePortArray> portArray = adoptPtrWillBeNoop(new MessagePortArray); ArrayBufferArray arrayBufferArray; int targetOriginArgIndex = 1; if (info.Length() > 2) { int transferablesArgIndex = 2; if (isLegacyTargetOriginDesignation(info[2])) { UseCounter::countIfNotPrivateScript(info.GetIsolate(), window->frame(), UseCounter::WindowPostMessageWithLegacyTargetOriginArgument); targetOriginArgIndex = 2; transferablesArgIndex = 1; } if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, *portArray, arrayBufferArray, exceptionState)) { exceptionState.throwIfNeeded(); return; } } TOSTRING_VOID(V8StringResource<TreatNullAndUndefinedAsNullString>, targetOrigin, info[targetOriginArgIndex]); RefPtr<SerializedScriptValue> message = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], portArray.get(), &arrayBufferArray, exceptionState); if (exceptionState.throwIfNeeded()) return; window->postMessage(message.release(), portArray.get(), targetOrigin, source, exceptionState); exceptionState.throwIfNeeded(); }
InspectorState* InspectorCompositeState::createAgentState(const String& agentName) { ASSERT(m_stateObject->find(agentName) == m_stateObject->end()); ASSERT(m_inspectorStateMap.find(agentName) == m_inspectorStateMap.end()); RefPtr<JSONObject> stateProperties = JSONObject::create(); m_stateObject->setObject(agentName, stateProperties); OwnPtrWillBeRawPtr<InspectorState> statePtr = adoptPtrWillBeNoop(new InspectorState(this, stateProperties)); InspectorState* state = statePtr.get(); m_inspectorStateMap.add(agentName, statePtr.release()); return state; }
bool InspectorPageAgent::applyViewportStyleOverride(StyleResolver* resolver) { if (!m_deviceMetricsOverridden || !m_emulateViewportEnabled) return false; RefPtrWillBeRawPtr<StyleSheetContents> styleSheet = StyleSheetContents::create(CSSParserContext(UASheetMode, 0)); styleSheet->parseString(String(viewportAndroidUserAgentStyleSheet, sizeof(viewportAndroidUserAgentStyleSheet))); OwnPtrWillBeRawPtr<RuleSet> ruleSet = RuleSet::create(); ruleSet->addRulesFromSheet(styleSheet.get(), MediaQueryEvaluator("screen")); resolver->viewportStyleResolver()->collectViewportRules(ruleSet.get(), ViewportStyleResolver::UserAgentOrigin); return true; }
V8Inspector::V8Inspector(v8::Isolate* isolate, PassOwnPtr<WorkerThreadDebugger::ClientMessageLoop> messageLoop) : m_stateClient(adoptPtr(new StateClientImpl())) , m_state(adoptPtrWillBeNoop(new InspectorCompositeState(m_stateClient.get()))) , m_injectedScriptManager(InjectedScriptManager::createForWorker()) , m_workerThreadDebugger(WorkerThreadDebugger::create(isolate, messageLoop)) , m_agents(m_state.get()) , m_frontendChannel(nullptr) , m_paused(false) { ScriptState* scriptState = ScriptState::current(isolate); OwnPtrWillBeRawPtr<WorkerRuntimeAgent> workerRuntimeAgent = WorkerRuntimeAgent::create(m_injectedScriptManager.get(), m_workerThreadDebugger->debugger(), scriptState, this); m_workerRuntimeAgent = workerRuntimeAgent.get(); m_agents.append(workerRuntimeAgent.release()); OwnPtrWillBeRawPtr<WorkerDebuggerAgent> workerDebuggerAgent = WorkerDebuggerAgent::create(m_workerThreadDebugger.get(), m_injectedScriptManager.get(), scriptState); m_workerDebuggerAgent = workerDebuggerAgent.get(); m_agents.append(workerDebuggerAgent.release()); m_injectedScriptManager->injectedScriptHost()->init(m_workerDebuggerAgent, nullptr, m_workerThreadDebugger->debugger(), adoptPtr(new InjectedScriptHostClientImpl())); }
TEST_F(GraphicsLayerTest, applyScrollToScrollableArea) { OwnPtrWillBeRawPtr<FakeScrollableArea> scrollableArea = FakeScrollableArea::create(); m_graphicsLayer->setScrollableArea(scrollableArea.get(), false); WebDoublePoint scrollPosition(7, 9); m_platformLayer->setScrollPositionDouble(scrollPosition); m_graphicsLayer->didScroll(); EXPECT_FLOAT_EQ(scrollPosition.x, scrollableArea->scrollPositionDouble().x()); EXPECT_FLOAT_EQ(scrollPosition.y, scrollableArea->scrollPositionDouble().y()); }
CustomElementMicrotaskImportStep* CustomElementScheduler::scheduleImport(HTMLImportChild* import) { ASSERT(!import->isDone()); ASSERT(import->parent()); // Ownership of the new step is transferred to the parent // processing step, or the base queue. OwnPtrWillBeRawPtr<CustomElementMicrotaskImportStep> step = CustomElementMicrotaskImportStep::create(import); CustomElementMicrotaskImportStep* rawStep = step.get(); CustomElementMicrotaskDispatcher::instance().enqueue(import->parent()->loader(), step.release(), import->isSync()); return rawStep; }
void WebSharedWorkerImpl::onScriptLoaderFinished() { ASSERT(m_loadingDocument); ASSERT(m_mainScriptLoader); if (m_askedToTerminate) return; if (m_mainScriptLoader->failed()) { m_mainScriptLoader->cancel(); if (client()) client()->workerScriptLoadFailed(); // The SharedWorker was unable to load the initial script, so // shut it down right here. delete this; return; } Document* document = m_mainFrame->frame()->document(); WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart; if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document)) startMode = PauseWorkerGlobalScopeOnStart; // FIXME: this document's origin is pristine and without any extra privileges. (crbug.com/254993) SecurityOrigin* starterOrigin = document->securityOrigin(); OwnPtrWillBeRawPtr<WorkerClients> workerClients = WorkerClients::create(); provideLocalFileSystemToWorker(workerClients.get(), LocalFileSystemClient::create()); WebSecurityOrigin webSecurityOrigin(m_loadingDocument->securityOrigin()); provideContentSettingsClientToWorker(workerClients.get(), adoptPtr(client()->createWorkerContentSettingsClientProxy(webSecurityOrigin))); OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(m_url, m_loadingDocument->userAgent(m_url), m_mainScriptLoader->script(), nullptr, startMode, m_contentSecurityPolicy, static_cast<ContentSecurityPolicyHeaderType>(m_policyType), starterOrigin, workerClients.release()); m_loaderProxy = WorkerLoaderProxy::create(this); setWorkerThread(SharedWorkerThread::create(m_name, m_loaderProxy, *this)); InspectorInstrumentation::scriptImported(m_loadingDocument.get(), m_mainScriptLoader->identifier(), m_mainScriptLoader->script()); m_mainScriptLoader.clear(); workerThread()->start(startupData.release()); m_workerInspectorProxy->workerThreadCreated(m_loadingDocument.get(), workerThread(), m_url); if (client()) client()->workerScriptLoaded(); }
GraphicsContext* SVGFilterPainter::prepareEffect(const LayoutObject& object, SVGFilterRecordingContext& recordingContext) { ASSERT(recordingContext.paintingContext()); m_filter.clearInvalidationMask(); if (FilterData* filterData = m_filter.getFilterDataForLayoutObject(&object)) { // If the filterData already exists we do not need to record the content // to be filtered. This can occur if the content was previously recorded // or we are in a cycle. if (filterData->m_state == FilterData::PaintingFilter) filterData->m_state = FilterData::PaintingFilterCycleDetected; if (filterData->m_state == FilterData::RecordingContent) filterData->m_state = FilterData::RecordingContentCycleDetected; return nullptr; } OwnPtrWillBeRawPtr<FilterData> filterData = FilterData::create(); FloatRect referenceBox = object.objectBoundingBox(); SVGFilterElement* filterElement = toSVGFilterElement(m_filter.element()); FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(filterElement, filterElement->filterUnits()->currentValue()->enumValue(), referenceBox); if (filterRegion.isEmpty()) return nullptr; // Create the SVGFilter object. bool primitiveBoundingBoxMode = filterElement->primitiveUnits()->currentValue()->enumValue() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX; Filter::UnitScaling unitScaling = primitiveBoundingBoxMode ? Filter::BoundingBox : Filter::UserSpace; filterData->filter = Filter::create(referenceBox, filterRegion, 1, unitScaling); filterData->nodeMap = SVGFilterGraphNodeMap::create(); IntRect sourceRegion = enclosingIntRect(intersection(filterRegion, object.strokeBoundingBox())); filterData->filter->sourceGraphic()->setSourceRect(sourceRegion); // Create all relevant filter primitives. SVGFilterBuilder builder(filterData->filter->sourceGraphic(), filterData->nodeMap.get()); builder.buildGraph(filterData->filter.get(), *filterElement, referenceBox); FilterEffect* lastEffect = builder.lastEffect(); if (!lastEffect) return nullptr; lastEffect->determineFilterPrimitiveSubregion(ClipToFilterRegion); filterData->filter->setLastEffect(lastEffect); FilterData* data = filterData.get(); // TODO(pdr): Can this be moved out of painter? m_filter.setFilterDataForLayoutObject(const_cast<LayoutObject*>(&object), filterData.release()); return recordingContext.beginContent(data); }
TEST_F(ScrollableAreaTest, ScrollbarGraphicsLayerInvalidation) { ScrollbarTheme::setMockScrollbarsEnabled(true); OwnPtrWillBeRawPtr<MockScrollableArea> scrollableArea = MockScrollableArea::create(IntPoint(0, 100)); MockGraphicsLayerClient graphicsLayerClient; MockGraphicsLayer graphicsLayer(&graphicsLayerClient); graphicsLayer.setDrawsContent(true); graphicsLayer.setSize(FloatSize(111, 222)); EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()).WillRepeatedly(Return(&graphicsLayer)); RefPtrWillBeRawPtr<Scrollbar> scrollbar = Scrollbar::create(scrollableArea.get(), HorizontalScrollbar, RegularScrollbar); graphicsLayer.resetTrackedPaintInvalidations(); scrollbar->setNeedsPaintInvalidation(); EXPECT_TRUE(graphicsLayer.hasTrackedPaintInvalidations()); }
// Test that a smooth scroll offset animation is aborted when followed by a // non-smooth scroll offset animation. TEST(ScrollAnimatorTest, AnimatedScrollAborted) { OwnPtrWillBeRawPtr<MockScrollableArea> scrollableArea = MockScrollableArea::create(true); OwnPtrWillBeRawPtr<ScrollAnimator> scrollAnimator = adoptPtrWillBeNoop( new ScrollAnimator(scrollableArea.get(), getMockedTime)); EXPECT_CALL(*scrollableArea, minimumScrollPosition()).Times(AtLeast(1)) .WillRepeatedly(Return(IntPoint())); EXPECT_CALL(*scrollableArea, maximumScrollPosition()).Times(AtLeast(1)) .WillRepeatedly(Return(IntPoint(1000, 1000))); EXPECT_CALL(*scrollableArea, setScrollOffset(_, _)).Times(3); EXPECT_CALL(*scrollableArea, registerForAnimation()).Times(2); EXPECT_CALL(*scrollableArea, scheduleAnimation()).Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_FALSE(scrollAnimator->hasAnimationThatRequiresService()); // Smooth scroll. ScrollResultOneDimensional result = scrollAnimator->userScroll( HorizontalScrollbar, ScrollByLine, 100, 1); EXPECT_TRUE(scrollAnimator->hasAnimationThatRequiresService()); EXPECT_TRUE(result.didScroll); EXPECT_FLOAT_EQ(0.0, result.unusedScrollDelta); EXPECT_TRUE(scrollAnimator->hasRunningAnimation()); gMockedTime += 0.05; scrollAnimator->updateCompositorAnimations(); scrollAnimator->tickAnimation(getMockedTime()); EXPECT_NE(100, scrollAnimator->currentPosition().x()); EXPECT_NE(0, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); float x = scrollAnimator->currentPosition().x(); // Instant scroll. result = scrollAnimator->userScroll( HorizontalScrollbar, ScrollByPrecisePixel, 100, 1); EXPECT_TRUE(result.didScroll); EXPECT_FALSE(scrollAnimator->hasRunningAnimation()); EXPECT_EQ(x + 100, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); }
bool RenderSVGResourceFilter::prepareEffect(RenderObject* object, GraphicsContext*& context) { ASSERT(object); ASSERT(context); clearInvalidationMask(); if (m_filter.contains(object)) { FilterData* filterData = m_filter.get(object); if (filterData->state == FilterData::PaintingSource) filterData->state = FilterData::CycleDetected; return false; // Already built, or we're in a cycle. Regardless, just do nothing more now. } OwnPtrWillBeRawPtr<FilterData> filterData = FilterData::create(); FloatRect targetBoundingBox = object->objectBoundingBox(); SVGFilterElement* filterElement = toSVGFilterElement(element()); filterData->boundaries = SVGLengthContext::resolveRectangle<SVGFilterElement>(filterElement, filterElement->filterUnits()->currentValue()->enumValue(), targetBoundingBox); if (filterData->boundaries.isEmpty()) return false; // Create the SVGFilter object. FloatRect drawingRegion = object->strokeBoundingBox(); drawingRegion.intersect(filterData->boundaries); bool primitiveBoundingBoxMode = filterElement->primitiveUnits()->currentValue()->enumValue() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX; filterData->filter = SVGFilter::create(enclosingIntRect(drawingRegion), targetBoundingBox, filterData->boundaries, primitiveBoundingBoxMode); // Create all relevant filter primitives. filterData->builder = buildPrimitives(filterData->filter.get()); if (!filterData->builder) return false; FilterEffect* lastEffect = filterData->builder->lastEffect(); if (!lastEffect) return false; lastEffect->determineFilterPrimitiveSubregion(ClipToFilterRegion); FilterData* data = filterData.get(); m_filter.set(object, filterData.release()); beginDeferredFilter(context, data); return true; }
WindowProxy* ScriptController::windowProxy(DOMWrapperWorld& world) { WindowProxy* windowProxy = nullptr; if (world.isMainWorld()) { windowProxy = m_windowProxy.get(); } else { IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()); if (iter != m_isolatedWorlds.end()) { windowProxy = iter->value.get(); } else { OwnPtrWillBeRawPtr<WindowProxy> isolatedWorldWindowProxy = WindowProxy::create(m_frame, world, m_isolate); windowProxy = isolatedWorldWindowProxy.get(); m_isolatedWorlds.set(world.worldId(), isolatedWorldWindowProxy.release()); } } if (!windowProxy->isContextInitialized() && windowProxy->initializeIfNeeded() && world.isMainWorld()) m_frame->loader().dispatchDidClearWindowObjectInMainWorld(); return windowProxy; }
TEST_F(ScrollableAreaTest, ScrollbarGraphicsLayerInvalidation) { ScrollbarTheme::setMockScrollbarsEnabled(true); OwnPtrWillBeRawPtr<MockScrollableArea> scrollableArea = MockScrollableArea::create(IntPoint(0, 100)); MockGraphicsLayerClient graphicsLayerClient; MockGraphicsLayer graphicsLayer(&graphicsLayerClient); graphicsLayer.setDrawsContent(true); graphicsLayer.setSize(FloatSize(111, 222)); EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()).WillRepeatedly(Return(&graphicsLayer)); RefPtrWillBeRawPtr<Scrollbar> scrollbar = Scrollbar::create(scrollableArea.get(), HorizontalScrollbar, RegularScrollbar, nullptr); graphicsLayer.resetTrackedPaintInvalidations(); scrollbar->setNeedsPaintInvalidation(NoPart); EXPECT_TRUE(graphicsLayer.hasTrackedPaintInvalidations()); // Forced GC in order to finalize objects depending on the mock object. Heap::collectAllGarbage(); }
TEST_F(PrintContextFrameTest, WithScrolledSubframe) { MockCanvas canvas; document().setBaseURLOverride(KURL(ParsedURLString, "http://a.com/")); setBodyInnerHTML("<style>::-webkit-scrollbar { display: none }</style>" "<iframe id='frame' src='http://b.com/' width='500' height='500'" " style='border-width: 5px; margin: 5px; position: absolute; top: 90px; left: 90px'></iframe>"); HTMLIFrameElement& iframe = *toHTMLIFrameElement(document().getElementById("frame")); OwnPtrWillBeRawPtr<FrameLoaderClient> frameLoaderClient = FrameLoaderClientWithParent::create(document().frame()); RefPtrWillBePersistent<LocalFrame> subframe = LocalFrame::create(frameLoaderClient.get(), document().frame()->host(), &iframe); subframe->setView(FrameView::create(subframe.get(), IntSize(500, 500))); subframe->init(); static_cast<SingleChildFrameLoaderClient*>(document().frame()->client())->setChild(subframe.get()); document().frame()->host()->incrementSubframeCount(); Document& frameDocument = *iframe.contentDocument(); frameDocument.setBaseURLOverride(KURL(ParsedURLString, "http://b.com/")); frameDocument.body()->setInnerHTML( absoluteBlockHtmlForLink(10, 10, 20, 20, "http://invisible.com") + absoluteBlockHtmlForLink(50, 60, 70, 80, "http://partly.visible.com") + absoluteBlockHtmlForLink(150, 160, 170, 180, "http://www.google.com") + absoluteBlockHtmlForLink(250, 260, 270, 280, "http://www.google.com#fragment") + absoluteBlockHtmlForLink(850, 860, 70, 80, "http://another.invisible.com"), ASSERT_NO_EXCEPTION); iframe.contentWindow()->scrollTo(100, 100); printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(3u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 70, 80, operations[0].rect); // FIXME: the rect should be clipped. EXPECT_EQ(MockCanvas::DrawRect, operations[1].type); EXPECT_SKRECT_EQ(150, 160, 170, 180, operations[1].rect); EXPECT_EQ(MockCanvas::DrawRect, operations[2].type); EXPECT_SKRECT_EQ(250, 260, 270, 280, operations[2].rect); subframe->detach(FrameDetachType::Remove); static_cast<SingleChildFrameLoaderClient*>(document().frame()->client())->setChild(nullptr); document().frame()->host()->decrementSubframeCount(); }
bool HTMLScriptRunner::executeScriptsWaitingForParsing() { TRACE_EVENT0("blink", "HTMLScriptRunner::executeScriptsWaitingForParsing"); while (!m_scriptsToExecuteAfterParsing.isEmpty()) { ASSERT(!isExecutingScript()); ASSERT(!hasParserBlockingScript()); ASSERT(m_scriptsToExecuteAfterParsing.first()->resource()); if (!m_scriptsToExecuteAfterParsing.first()->isReady()) { m_scriptsToExecuteAfterParsing.first()->watchForLoad(this); traceParserBlockingScript(m_scriptsToExecuteAfterParsing.first().get(), !m_document->isScriptExecutionReady()); return false; } OwnPtrWillBeRawPtr<PendingScript> first = m_scriptsToExecuteAfterParsing.takeFirst(); executePendingScriptAndDispatchEvent(first.get(), ScriptStreamer::Deferred); // FIXME: What is this m_document check for? if (!m_document) return false; } return true; }
void Animation::applyEffects() { ASSERT(isInEffect()); ASSERT(player()); if (!m_target || !m_effect) return; double iteration = currentIteration(); ASSERT(iteration >= 0); // FIXME: Handle iteration values which overflow int. OwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation> > > interpolations = m_effect->sample(static_cast<int>(iteration), timeFraction(), iterationDuration()); if (m_sampledEffect) { m_sampledEffect->setInterpolations(interpolations.release()); } else if (!interpolations->isEmpty()) { OwnPtrWillBeRawPtr<SampledEffect> sampledEffect = SampledEffect::create(this, interpolations.release()); m_sampledEffect = sampledEffect.get(); ensureAnimationStack(m_target).add(sampledEffect.release()); } else { return; } m_target->setNeedsAnimationStyleRecalc(); }
WorkerInspectorController::WorkerInspectorController(WorkerGlobalScope* workerGlobalScope) : m_workerGlobalScope(workerGlobalScope) , m_stateClient(adoptPtr(new WorkerStateClient(workerGlobalScope))) , m_state(adoptPtrWillBeNoop(new InspectorCompositeState(m_stateClient.get()))) , m_instrumentingAgents(InstrumentingAgents::create()) , m_injectedScriptManager(InjectedScriptManager::createForWorker()) , m_debugServer(adoptPtr(new WorkerScriptDebugServer(workerGlobalScope))) , m_agents(m_instrumentingAgents.get(), m_state.get()) { m_agents.append(WorkerRuntimeAgent::create(m_injectedScriptManager.get(), m_debugServer.get(), workerGlobalScope)); OwnPtrWillBeRawPtr<WorkerDebuggerAgent> workerDebuggerAgent = WorkerDebuggerAgent::create(m_debugServer.get(), workerGlobalScope, m_injectedScriptManager.get()); m_workerDebuggerAgent = workerDebuggerAgent.get(); m_agents.append(workerDebuggerAgent.release()); m_asyncCallTracker = adoptPtrWillBeNoop(new AsyncCallTracker(m_workerDebuggerAgent, m_instrumentingAgents.get())); m_agents.append(InspectorProfilerAgent::create(m_injectedScriptManager.get(), 0)); m_agents.append(InspectorHeapProfilerAgent::create(m_injectedScriptManager.get())); m_agents.append(WorkerConsoleAgent::create(m_injectedScriptManager.get(), workerGlobalScope)); m_agents.append(InspectorTimelineAgent::create(0, 0, 0, InspectorTimelineAgent::WorkerInspector, 0)); m_injectedScriptManager->injectedScriptHost()->init(m_instrumentingAgents.get(), m_debugServer.get()); }
TEST(ScrollAnimatorTest, Enabled) { OwnPtrWillBeRawPtr<MockScrollableArea> scrollableArea = MockScrollableArea::create(true); OwnPtr<ScrollAnimator> scrollAnimator = adoptPtr(new ScrollAnimator(scrollableArea.get(), getMockedTime)); EXPECT_CALL(*scrollableArea, minimumScrollPosition()).Times(AtLeast(1)).WillRepeatedly(Return(IntPoint())); EXPECT_CALL(*scrollableArea, maximumScrollPosition()).Times(AtLeast(1)).WillRepeatedly(Return(IntPoint(1000, 1000))); EXPECT_CALL(*scrollableArea, setScrollOffset(_, _)).Times(12); EXPECT_CALL(*scrollableArea, registerForAnimation()).Times(3); EXPECT_FALSE(scrollAnimator->hasRunningAnimation()); ScrollResultOneDimensional result = scrollAnimator->userScroll(HorizontalScrollbar, ScrollByLine, 100, -1); EXPECT_FALSE(scrollAnimator->hasRunningAnimation()); EXPECT_FALSE(result.didScroll); EXPECT_FLOAT_EQ(-100.0, result.unusedScrollDelta); result = scrollAnimator->userScroll(HorizontalScrollbar, ScrollByLine, 100, 1); EXPECT_TRUE(scrollAnimator->hasRunningAnimation()); EXPECT_TRUE(result.didScroll); EXPECT_FLOAT_EQ(0.0, result.unusedScrollDelta); gMockedTime += 0.05; scrollAnimator->serviceScrollAnimations(); EXPECT_NE(100, scrollAnimator->currentPosition().x()); EXPECT_NE(0, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); scrollAnimator->userScroll(HorizontalScrollbar, ScrollByPage, 100, 1); EXPECT_TRUE(scrollAnimator->hasRunningAnimation()); gMockedTime += 0.05; scrollAnimator->serviceScrollAnimations(); EXPECT_NE(100, scrollAnimator->currentPosition().x()); EXPECT_NE(0, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); scrollAnimator->userScroll(HorizontalScrollbar, ScrollByPixel, 4, 25); EXPECT_TRUE(scrollAnimator->hasRunningAnimation()); gMockedTime += 0.05; scrollAnimator->serviceScrollAnimations(); EXPECT_NE(100, scrollAnimator->currentPosition().x()); EXPECT_NE(0, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); gMockedTime += 1.0; scrollAnimator->serviceScrollAnimations(); EXPECT_FALSE(scrollAnimator->hasRunningAnimation()); EXPECT_EQ(100, scrollAnimator->currentPosition().x()); reset(*scrollAnimator); scrollAnimator->userScroll(HorizontalScrollbar, ScrollByPrecisePixel, 4, 25); EXPECT_FALSE(scrollAnimator->hasRunningAnimation()); EXPECT_EQ(100, scrollAnimator->currentPosition().x()); EXPECT_NE(0, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); }
void HTMLImportsController::provideTo(Document& master) { OwnPtrWillBeRawPtr<HTMLImportsController> controller = adoptPtrWillBeNoop(new HTMLImportsController(master)); master.setImportsController(controller.get()); DocumentSupplement::provideTo(master, supplementName(), controller.release()); }
TEST_F(ScrollableAreaTest, InvalidatesCompositedScrollbarsIfPartsNeedRepaint) { ScrollbarThemeWithMockInvalidation theme; OwnPtrWillBeRawPtr<MockScrollableArea> scrollableArea = MockScrollableArea::create(IntPoint(100, 100)); RefPtrWillBeRawPtr<Scrollbar> horizontalScrollbar = Scrollbar::createForTesting(scrollableArea.get(), HorizontalScrollbar, RegularScrollbar, &theme); horizontalScrollbar->clearTrackNeedsRepaint(); horizontalScrollbar->clearThumbNeedsRepaint(); RefPtrWillBeRawPtr<Scrollbar> verticalScrollbar = Scrollbar::createForTesting(scrollableArea.get(), VerticalScrollbar, RegularScrollbar, &theme); verticalScrollbar->clearTrackNeedsRepaint(); verticalScrollbar->clearThumbNeedsRepaint(); EXPECT_CALL(*scrollableArea, horizontalScrollbar()).WillRepeatedly(Return(horizontalScrollbar.get())); EXPECT_CALL(*scrollableArea, verticalScrollbar()).WillRepeatedly(Return(verticalScrollbar.get())); // Composited scrollbars only need repainting when parts become invalid // (e.g. if the track changes appearance when the thumb reaches the end). MockGraphicsLayerClient graphicsLayerClient; MockGraphicsLayer layerForHorizontalScrollbar(&graphicsLayerClient); layerForHorizontalScrollbar.setDrawsContent(true); layerForHorizontalScrollbar.setSize(FloatSize(10, 10)); MockGraphicsLayer layerForVerticalScrollbar(&graphicsLayerClient); layerForVerticalScrollbar.setDrawsContent(true); layerForVerticalScrollbar.setSize(FloatSize(10, 10)); EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()).WillRepeatedly(Return(&layerForHorizontalScrollbar)); EXPECT_CALL(*scrollableArea, layerForVerticalScrollbar()).WillRepeatedly(Return(&layerForVerticalScrollbar)); ASSERT_TRUE(scrollableArea->hasLayerForHorizontalScrollbar()); ASSERT_TRUE(scrollableArea->hasLayerForVerticalScrollbar()); EXPECT_CALL(theme, shouldRepaintAllPartsOnInvalidation()).WillRepeatedly(Return(false)); // First, we'll scroll horizontally, and the theme will require repainting // the back button (i.e. the track). EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).WillOnce(Return(BackButtonStartPart)); scrollableArea->setScrollPosition(DoublePoint(50, 0), ProgrammaticScroll); EXPECT_TRUE(layerForHorizontalScrollbar.hasTrackedPaintInvalidations()); EXPECT_FALSE(layerForVerticalScrollbar.hasTrackedPaintInvalidations()); EXPECT_TRUE(horizontalScrollbar->trackNeedsRepaint()); EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); layerForHorizontalScrollbar.resetTrackedPaintInvalidations(); horizontalScrollbar->clearTrackNeedsRepaint(); // Next, we'll scroll vertically, but invalidate the thumb. EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).WillOnce(Return(ThumbPart)); scrollableArea->setScrollPosition(DoublePoint(50, 50), ProgrammaticScroll); EXPECT_FALSE(layerForHorizontalScrollbar.hasTrackedPaintInvalidations()); EXPECT_TRUE(layerForVerticalScrollbar.hasTrackedPaintInvalidations()); EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); EXPECT_TRUE(verticalScrollbar->thumbNeedsRepaint()); layerForVerticalScrollbar.resetTrackedPaintInvalidations(); verticalScrollbar->clearThumbNeedsRepaint(); // Next we'll scroll in both, but the thumb position moving requires no // invalidations. Nonetheless the GraphicsLayer should be invalidated, // because we still need to update the underlying layer (though no // rasterization will be required). EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).Times(2).WillRepeatedly(Return(NoPart)); scrollableArea->setScrollPosition(DoublePoint(70, 70), ProgrammaticScroll); EXPECT_TRUE(layerForHorizontalScrollbar.hasTrackedPaintInvalidations()); EXPECT_TRUE(layerForVerticalScrollbar.hasTrackedPaintInvalidations()); EXPECT_FALSE(horizontalScrollbar->trackNeedsRepaint()); EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); EXPECT_FALSE(verticalScrollbar->thumbNeedsRepaint()); // Forced GC in order to finalize objects depending on the mock object. Heap::collectAllGarbage(); }
WebDevToolsAgentImpl::WebDevToolsAgentImpl( WebLocalFrameImpl* webLocalFrameImpl, WebDevToolsAgentClient* client, InspectorOverlay* overlay) : m_client(client) , m_webLocalFrameImpl(webLocalFrameImpl) , m_attached(false) #if ENABLE(ASSERT) , m_hasBeenDisposed(false) #endif , m_instrumentingAgents(m_webLocalFrameImpl->frame()->instrumentingAgents()) , m_injectedScriptManager(InjectedScriptManager::createForPage()) , m_resourceContentLoader(InspectorResourceContentLoader::create(m_webLocalFrameImpl->frame())) , m_state(adoptPtrWillBeNoop(new InspectorCompositeState(this))) , m_overlay(overlay) , m_cssAgent(nullptr) , m_resourceAgent(nullptr) , m_layerTreeAgent(nullptr) , m_agents(m_instrumentingAgents.get(), m_state.get()) , m_deferredAgentsInitialized(false) { ASSERT(isMainThread()); ASSERT(m_webLocalFrameImpl->frame()); long processId = Platform::current()->getUniqueIdForProcess(); ASSERT(processId > 0); IdentifiersFactory::setProcessId(processId); InjectedScriptManager* injectedScriptManager = m_injectedScriptManager.get(); OwnPtrWillBeRawPtr<InspectorInspectorAgent> inspectorAgentPtr(InspectorInspectorAgent::create(injectedScriptManager)); m_inspectorAgent = inspectorAgentPtr.get(); m_agents.append(inspectorAgentPtr.release()); OwnPtrWillBeRawPtr<InspectorPageAgent> pageAgentPtr(InspectorPageAgent::create(m_webLocalFrameImpl->frame(), m_overlay, m_resourceContentLoader.get())); m_pageAgent = pageAgentPtr.get(); m_agents.append(pageAgentPtr.release()); OwnPtrWillBeRawPtr<InspectorDOMAgent> domAgentPtr(InspectorDOMAgent::create(m_pageAgent, injectedScriptManager, m_overlay)); m_domAgent = domAgentPtr.get(); m_agents.append(domAgentPtr.release()); OwnPtrWillBeRawPtr<InspectorLayerTreeAgent> layerTreeAgentPtr(InspectorLayerTreeAgent::create(m_pageAgent)); m_layerTreeAgent = layerTreeAgentPtr.get(); m_agents.append(layerTreeAgentPtr.release()); m_agents.append(InspectorTimelineAgent::create()); ClientMessageLoopAdapter::ensureMainThreadDebuggerCreated(m_client); MainThreadDebugger* mainThreadDebugger = MainThreadDebugger::instance(); OwnPtrWillBeRawPtr<PageRuntimeAgent> pageRuntimeAgentPtr(PageRuntimeAgent::create(injectedScriptManager, this, mainThreadDebugger->debugger(), m_pageAgent)); m_pageRuntimeAgent = pageRuntimeAgentPtr.get(); m_agents.append(pageRuntimeAgentPtr.release()); OwnPtrWillBeRawPtr<PageConsoleAgent> pageConsoleAgentPtr = PageConsoleAgent::create(injectedScriptManager, m_domAgent, m_pageAgent); m_pageConsoleAgent = pageConsoleAgentPtr.get(); OwnPtrWillBeRawPtr<InspectorWorkerAgent> workerAgentPtr = InspectorWorkerAgent::create(pageConsoleAgentPtr.get()); OwnPtrWillBeRawPtr<InspectorTracingAgent> tracingAgentPtr = InspectorTracingAgent::create(this, workerAgentPtr.get(), m_pageAgent); m_tracingAgent = tracingAgentPtr.get(); m_agents.append(tracingAgentPtr.release()); m_agents.append(workerAgentPtr.release()); m_agents.append(pageConsoleAgentPtr.release()); m_agents.append(ScreenOrientationInspectorAgent::create(*m_webLocalFrameImpl->frame())); }
TEST(ScrollAnimatorTest, Disabled) { OwnPtrWillBeRawPtr<MockScrollableArea> scrollableArea = MockScrollableArea::create(false); OwnPtrWillBeRawPtr<ScrollAnimator> scrollAnimator = adoptPtrWillBeNoop(new ScrollAnimator(scrollableArea.get(), getMockedTime)); EXPECT_CALL(*scrollableArea, minimumScrollPosition()).Times(AtLeast(1)).WillRepeatedly(Return(IntPoint())); EXPECT_CALL(*scrollableArea, maximumScrollPosition()).Times(AtLeast(1)).WillRepeatedly(Return(IntPoint(1000, 1000))); EXPECT_CALL(*scrollableArea, setScrollOffset(_, _)).Times(8); EXPECT_CALL(*scrollableArea, registerForAnimation()).Times(0); scrollAnimator->userScroll(HorizontalScrollbar, ScrollByLine, 100, 1); EXPECT_EQ(100, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); scrollAnimator->userScroll(HorizontalScrollbar, ScrollByPage, 100, 1); EXPECT_EQ(100, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); scrollAnimator->userScroll(HorizontalScrollbar, ScrollByDocument, 100, 1); EXPECT_EQ(100, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); scrollAnimator->userScroll(HorizontalScrollbar, ScrollByPixel, 100, 1); EXPECT_EQ(100, scrollAnimator->currentPosition().x()); EXPECT_EQ(0, scrollAnimator->currentPosition().y()); reset(*scrollAnimator); }