static JSValueRef IsSearchProviderInstalledMethod( JSContextRef ctx, JSObjectRef functionObject, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { JSValueRef jsRetVal = JSValueMakeUndefined(ctx); if (argumentCount < 1) return jsRetVal; // Double check if page chrome client exists Frame* frame = reinterpret_cast<Frame*>(JSObjectGetPrivate(thisObject)); if (frame) { Page* page = frame->page(); if (!page || !page->chrome()) return jsRetVal; JSStringRef string = JSValueToStringCopy(ctx, arguments[0], 0); size_t sizeUTF8 = JSStringGetMaximumUTF8CStringSize(string); char* newURL = new char[sizeUTF8]; JSStringGetUTF8CString(string, newURL, sizeUTF8); JSStringRelease(string); String originURL = frame->document()->securityOrigin()->toString(); ChromeClientBlackBerry* chrome = static_cast<ChromeClientBlackBerry*> (page->chrome()->client()); int retVal = chrome->isSearchProviderInstalled(originURL, newURL); jsRetVal = JSValueMakeNumber(ctx, retVal); } return jsRetVal; }
void SVGSVGElement::setZoomAndPan(unsigned short zoomAndPan) { SVGZoomAndPan::setZoomAndPan(zoomAndPan); Page* page = document()->page(); if (page && page->chrome() && page->chrome()->client()) page->chrome()->client()->didSetSVGZoomAndPan(document()->frame(), this->zoomAndPan()); }
bool HTMLVideoElement::supportsFullscreen() const { Page* page = document().page(); if (!page) return false; if (!player() || !player()->supportsFullscreen()) return false; #if PLATFORM(IOS) // Fullscreen implemented by player. return true; #else #if ENABLE(FULLSCREEN_API) // If the full screen API is enabled and is supported for the current element // do not require that the player has a video track to enter full screen. if (page->chrome().client().supportsFullScreenForElement(this, false)) return true; #endif if (!player()->hasVideo()) return false; return page->chrome().client().supportsVideoFullscreen(); #endif // PLATFORM(IOS) }
void AXObjectCache::postPlatformNotification(AccessibilityObject* obj, AXNotification notification) { if (!obj) return; Document* document = obj->document(); if (!document) return; Page* page = document->page(); if (!page || !page->chrome().platformPageClient()) return; DWORD msaaEvent; switch (notification) { case AXCheckedStateChanged: msaaEvent = EVENT_OBJECT_STATECHANGE; break; case AXFocusedUIElementChanged: case AXActiveDescendantChanged: msaaEvent = EVENT_OBJECT_FOCUS; break; case AXScrolledToAnchor: msaaEvent = EVENT_SYSTEM_SCROLLINGSTART; break; case AXLayoutComplete: msaaEvent = EVENT_OBJECT_REORDER; break; case AXLoadComplete: msaaEvent = IA2_EVENT_DOCUMENT_LOAD_COMPLETE; break; case AXValueChanged: case AXMenuListValueChanged: msaaEvent = EVENT_OBJECT_VALUECHANGE; break; case AXMenuListItemSelected: msaaEvent = EVENT_OBJECT_SELECTION; break; default: return; } // Windows will end up calling get_accChild() on the root accessible // object for the WebView, passing the child ID that we specify below. We // negate the AXID so we know that the caller is passing the ID of an // element, not the index of a child element. ASSERT(obj->axObjectID() >= 1); ASSERT(obj->axObjectID() <= numeric_limits<LONG>::max()); NotifyWinEvent(msaaEvent, page->chrome().platformPageClient(), OBJID_CLIENT, -static_cast<LONG>(obj->axObjectID())); }
void Console::addMessage(MessageType type, MessageLevel level, PassRefPtr<ScriptArguments> prpArguments, PassRefPtr<ScriptCallStack> prpCallStack, bool acceptNoArguments) { RefPtr<ScriptArguments> arguments = prpArguments; RefPtr<ScriptCallStack> callStack = prpCallStack; Page* page = this->page(); if (!page) return; const ScriptCallFrame& lastCaller = callStack->at(0); if (!acceptNoArguments && !arguments->argumentCount()) return; if (Console::shouldPrintExceptions()) { printSourceURLAndLine(lastCaller.sourceURL(), 0); printMessageSourceAndLevelPrefix(JSMessageSource, level); for (unsigned i = 0; i < arguments->argumentCount(); ++i) { String argAsString; if (arguments->argumentAt(i).getString(arguments->globalState(), argAsString)) printf(" %s", argAsString.utf8().data()); } printf("\n"); } String message; if (arguments->getFirstArgumentAsString(message)) page->chrome()->client()->addMessageToConsole(JSMessageSource, type, level, message, lastCaller.lineNumber(), lastCaller.sourceURL()); InspectorInstrumentation::addMessageToConsole(page, JSMessageSource, type, level, message, arguments, callStack); }
int NetworkManager::startJob(int playerId, PassRefPtr<ResourceHandle> job, const ResourceRequest& request, Frame* frame, bool defersLoading) { Page* page = frame->page(); ASSERT(page); BlackBerry::Platform::NetworkStreamFactory* streamFactory = page->chrome().platformPageClient()->networkStreamFactory(); return startJob(playerId, page->groupName(), job, request, streamFactory, frame, defersLoading ? 1 : 0); }
SocketStreamHandle::SocketStreamHandle(const String& groupName, const KURL& url, SocketStreamHandleClient* client) : SocketStreamHandleBase(url, client) { LOG(Network, "SocketStreamHandle %p new client %p", this, m_client); // Find a playerId to pass to the platform client. It can be from any page // in the PageGroup, since they all share the same network profile and // resources. PageGroup* pageGroup = PageGroup::pageGroup(groupName); ASSERT(pageGroup && !pageGroup->pages().isEmpty()); Page* page = *(pageGroup->pages().begin()); ASSERT(page && page->mainFrame()); int playerId = static_cast<FrameLoaderClientBlackBerry*>(page->mainFrame()->loader()->client())->playerId(); // Create a platform socket stream BlackBerry::Platform::NetworkStreamFactory* factory = page->chrome()->platformPageClient()->networkStreamFactory(); ASSERT(factory); m_socketStream = adoptPtr(factory->createSocketStream(playerId)); ASSERT(m_socketStream); m_socketStream->setListener(this); // Open the socket BlackBerry::Platform::NetworkRequest request; request.setRequestUrl(url.string().latin1().data(), "CONNECT"); m_socketStream->setRequest(request); m_socketStream->streamOpen(); }
void RenderLayerCompositor::cacheAcceleratedCompositingFlags() { bool hasAcceleratedCompositing = false; bool showDebugBorders = false; bool showRepaintCounter = false; if (Settings* settings = m_renderView->document()->settings()) { hasAcceleratedCompositing = settings->acceleratedCompositingEnabled(); showDebugBorders = settings->showDebugBorders(); showRepaintCounter = settings->showRepaintCounter(); } // We allow the chrome to override the settings, in case the page is rendered // on a chrome that doesn't allow accelerated compositing. if (hasAcceleratedCompositing) { Frame* frame = m_renderView->frameView()->frame(); Page* page = frame ? frame->page() : 0; if (page) hasAcceleratedCompositing = page->chrome()->client()->allowsAcceleratedCompositing(); } if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter) setCompositingLayersNeedRebuild(); m_hasAcceleratedCompositing = hasAcceleratedCompositing; m_showDebugBorders = showDebugBorders; m_showRepaintCounter = showRepaintCounter; }
void PageConsole::addMessage(MessageSource source, MessageLevel level, const String& message, const String& url, unsigned lineNumber, unsigned columnNumber, PassRefPtr<ScriptCallStack> callStack, JSC::ExecState* state, unsigned long requestIdentifier) { if (muteCount && source != ConsoleAPIMessageSource) return; Page* page = this->page(); if (!page) return; if (callStack) InspectorInstrumentation::addMessageToConsole(page, source, LogMessageType, level, message, callStack, requestIdentifier); else InspectorInstrumentation::addMessageToConsole(page, source, LogMessageType, level, message, url, lineNumber, columnNumber, state, requestIdentifier); if (source == CSSMessageSource) return; if (page->settings().privateBrowsingEnabled()) return; page->chrome().client().addMessageToConsole(source, level, message, lineNumber, columnNumber, url); if (!page->settings().logsPageMessagesToSystemConsoleEnabled() && !shouldPrintExceptions()) return; printSourceURLAndLine(url, lineNumber); printMessageSourceAndLevelPrefix(source, level); printf(" %s\n", message.utf8().data()); }
void Console::addMessage(MessageType type, MessageLevel level, ScriptCallStack* callStack, bool acceptNoArguments) { #if ENABLE(INSPECTOR) Page* page = this->page(); if (!page) return; const ScriptCallFrame& lastCaller = callStack->at(0); if (!acceptNoArguments && !lastCaller.argumentCount()) return; String message; if (getFirstArgumentAsString(callStack->state(), lastCaller, message)) page->chrome()->client()->addMessageToConsole(JSMessageSource, type, level, message, lastCaller.lineNumber(), lastCaller.sourceURL().prettyURL()); page->inspectorController()->addMessageToConsole(JSMessageSource, type, level, callStack); if (!Console::shouldPrintExceptions()) return; printSourceURLAndLine(lastCaller.sourceURL().prettyURL(), 0); printMessageSourceAndLevelPrefix(JSMessageSource, level); for (unsigned i = 0; i < lastCaller.argumentCount(); ++i) { String argAsString; if (lastCaller.argumentAt(i).getString(callStack->state(), argAsString)) printf(" %s", argAsString.utf8().data()); } printf("\n"); #endif }
void Widget::setCursor(const Cursor& cursor) { // This is set by PluginViewWin so it can ignore the setCursor call made by // EventHandler.cpp. if (ignoreNextSetCursor) { ignoreNextSetCursor = false; return; } if (!cursor.impl()->nativeCursor()) return; lastSetCursor = cursor.impl()->nativeCursor(); ScrollView* view = root(); if (!view || !view->isFrameView()) { SetCursor(lastSetCursor); return; } Frame* frame = static_cast<FrameView*>(view)->frame(); if (!frame) { SetCursor(lastSetCursor); return; } Page* page = frame->page(); if (!page) { SetCursor(lastSetCursor); return; } page->chrome()->setCursor(lastSetCursor); }
void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) { ASSERT(parent()->isFrameView()); // We cache the parent FrameView here as the plugin widget could be deleted // in the call to HandleEvent. See http://b/issue?id=1362948 FrameView* parentView = static_cast<FrameView*>(parent()); WebMouseEventBuilder webEvent(parentView, *event); if (webEvent.type == WebInputEvent::Undefined) return; if (event->type() == eventNames().mousedownEvent) { // Ensure that the frame containing the plugin has focus. Frame* containingFrame = parentView->frame(); if (Page* currentPage = containingFrame->page()) currentPage->focusController()->setFocusedFrame(containingFrame); // Give focus to our containing HTMLPluginElement. containingFrame->document()->setFocusedNode(m_element); } WebCursorInfo cursorInfo; if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) event->setDefaultHandled(); // A windowless plugin can change the cursor in response to a mouse move // event. We need to reflect the changed cursor in the frame view as the // mouse is moved in the boundaries of the windowless plugin. Page* page = parentView->frame()->page(); if (!page) return; ChromeClientImpl* chromeClient = static_cast<ChromeClientImpl*>(page->chrome()->client()); chromeClient->setCursorForPlugin(cursorInfo); }
bool JSDOMWindowBase::shouldInterruptScript(const JSGlobalObject* object) { const JSDOMWindowBase* thisObject = static_cast<const JSDOMWindowBase*>(object); ASSERT(thisObject->impl().frame()); Page* page = thisObject->impl().frame()->page(); return shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage(page) || page->chrome().shouldInterruptJavaScript(); }
void TextFieldInputType::autoFillButtonElementWasClicked() { Page* page = element().document().page(); if (!page) return; page->chrome().client().handleAutoFillButtonClick(element()); }
bool HTMLVideoElement::supportsFullscreen() const { Page* page = document() ? document()->page() : 0; if (!page) return false; if (!player() || !player()->supportsFullscreen() || !player()->hasVideo()) return false; // Check with the platform client. #if ENABLE(FULLSCREEN_API) if (page->chrome()->client()->supportsFullScreenForElement(this, false)) return true; #endif return page->chrome()->client()->supportsFullscreenForNode(this); }
static ChromeClientChromium* toChromeClientChromium(FrameView* view) { Page* page = view->frame() ? view->frame()->page() : 0; if (!page) return 0; return static_cast<ChromeClientChromium*>(page->chrome()->client()); }
void ScrollbarThemeComposite::paintScrollCorner(ScrollView* view, GraphicsContext* context, const IntRect& cornerRect) { FrameView* frameView = static_cast<FrameView*>(view); Page* page = frameView->frame() ? frameView->frame()->page() : 0; if (page && page->settings()->shouldPaintCustomScrollbars() && page->chrome()->client()->paintCustomScrollCorner(context, cornerRect)) return; context->fillRect(cornerRect, Color::white, DeviceColorSpace); }
static bool canRunModalIfDuringPageDismissal(Page& page, ChromeClient::DialogType dialog, const String& message) { for (Frame* frame = &page.mainFrame(); frame; frame = frame->tree().traverseNext()) { FrameLoader::PageDismissalType dismissal = frame->loader().pageDismissalEventBeingDispatched(); if (dismissal != FrameLoader::NoDismissal) return page.chrome().client().shouldRunModalDialogDuringPageDismissal(dialog, message, dismissal); } return true; }
IntRect ScrollView::windowResizerRect() { ASSERT(isFrameView()); const FrameView* frameView = static_cast<const FrameView*>(this); Page* page = frameView->frame() ? frameView->frame()->page() : 0; if (!page) return IntRect(); return page->chrome()->windowResizerRect(); }
void ScrollView::addToDirtyRegion(const IntRect& containingWindowRect) { ASSERT(isFrameView()); const FrameView* frameView = static_cast<const FrameView*>(this); Page* page = frameView->frame() ? frameView->frame()->page() : 0; if (!page) return; page->chrome()->addToDirtyRegion(containingWindowRect); }
void AXObjectCache::frameLoadingEventPlatformNotification(AccessibilityObject* obj, AXLoadingEvent notification) { if (!obj) return; Document* document = obj->document(); if (!document) return; Page* page = document->page(); if (!page) return; if (notification == AXLoadingStarted) page->chrome().client().AXStartFrameLoad(); else if (notification == AXLoadingFinished) page->chrome().client().AXFinishFrameLoad(); }
void RootInlineBox::paintCustomHighlight(RenderObject::PaintInfo& paintInfo, int tx, int ty, const AtomicString& highlightType) { if (!renderer()->shouldPaintWithinRoot(paintInfo) || renderer()->style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseForeground) return; Frame* frame = renderer()->document()->frame(); if (!frame) return; Page* page = frame->page(); if (!page) return; // Get the inflated rect so that we can properly hit test. FloatRect rootRect(tx + x(), ty + selectionTop(), width(), selectionHeight()); FloatRect inflatedRect = page->chrome()->client()->customHighlightRect(renderer()->node(), highlightType, rootRect); if (inflatedRect.intersects(paintInfo.rect)) page->chrome()->client()->paintCustomHighlight(renderer()->node(), highlightType, rootRect, rootRect, false, true); }
void RenderLayerCompositor::scheduleSync() { Frame* frame = m_renderView->frameView()->frame(); Page* page = frame ? frame->page() : 0; if (!page) return; page->chrome()->client()->scheduleCompositingLayerSync(); }
void ScrollView::updateBackingStore() { ASSERT(isFrameView()); const FrameView* frameView = static_cast<const FrameView*>(this); Page* page = frameView->frame() ? frameView->frame()->page() : 0; if (!page) return; page->chrome()->updateBackingStore(); }
void ScrollView::scrollBackingStore(int dx, int dy, const IntRect& scrollViewRect, const IntRect& clipRect) { ASSERT(isFrameView()); const FrameView* frameView = static_cast<const FrameView*>(this); Page* page = frameView->frame() ? frameView->frame()->page() : 0; if (!page) return; page->chrome()->scrollBackingStore(dx, dy, scrollViewRect, clipRect); }
EAppearance RenderThemeQt::applyTheme(QStyleOption& option, RenderObject* o) const { // Default bits: no focus, no mouse over option.state &= ~(QStyle::State_HasFocus | QStyle::State_MouseOver); if (!isEnabled(o)) option.state &= ~QStyle::State_Enabled; if (isReadOnlyControl(o)) // Readonly is supported on textfields. option.state |= QStyle::State_ReadOnly; if (supportsFocus(o->style()->appearance()) && isFocused(o)) option.state |= QStyle::State_HasFocus; if (isHovered(o)) option.state |= QStyle::State_MouseOver; EAppearance result = o->style()->appearance(); switch (result) { case PushButtonAppearance: case SquareButtonAppearance: case ButtonAppearance: case ButtonBevelAppearance: case ListItemAppearance: case MenulistButtonAppearance: case ScrollbarButtonLeftAppearance: case ScrollbarButtonRightAppearance: case ScrollbarTrackHorizontalAppearance: case ScrollbarTrackVerticalAppearance: case ScrollbarThumbHorizontalAppearance: case ScrollbarThumbVerticalAppearance: case SearchFieldResultsButtonAppearance: case SearchFieldCancelButtonAppearance: { if (isPressed(o)) option.state |= QStyle::State_Sunken; else if (result == PushButtonAppearance) option.state |= QStyle::State_Raised; break; } } if(result == RadioAppearance || result == CheckboxAppearance) option.state |= (isChecked(o) ? QStyle::State_On : QStyle::State_Off); // If the webview has a custom palette, use it Page* page = o->document()->page(); if (page) { QWidget* view = static_cast<ChromeClientQt*>(page->chrome()->client())->m_webPage->view(); if (view) option.palette = view->palette(); } return result; }
bool HTMLVideoElement::supportsFullscreen() const { Page* page = document() ? document()->page() : 0; if (!page) return false; if (!player() || !player()->supportsFullscreen()) return false; // If the full screen API is enabled and is supported for the current element // do not require that the player has a video track to enter full screen. if (page->chrome()->client()->supportsFullScreenForElement(this, false)) return true; if (!player()->hasVideo()) return false; return page->chrome()->client()->supportsFullscreenForNode(this); }
Chrome* RenderFileUploadControl::chrome() const { Frame* frame = node()->document()->frame(); if (!frame) return 0; Page* page = frame->page(); if (!page) return 0; return page->chrome(); }
bool isInSVGImage(const Element* element) { ASSERT(element); Page* page = element->document().page(); if (!page) return false; return page->chrome().client().isSVGImageChromeClient(); }
void RenderFileUploadControl::click() { Frame* frame = node()->document()->frame(); if (!frame) return; Page* page = frame->page(); if (!page) return; page->chrome()->runOpenPanel(frame, m_fileChooser); }