bool Chrome::runJavaScriptConfirm(Frame* frame, const String& message) { willRunModalDialog(frame, ChromeClient::ConfirmDialog, m_client); // Defer loads in case the client method runs a new event loop that would // otherwise cause the load to continue while we're in the middle of executing JavaScript. PageGroupLoadDeferrer deferrer(m_page, true); ASSERT(frame); return m_client->runJavaScriptConfirm(frame, frame->displayStringModifiedByEncoding(message)); }
void ResourceHandle::platformLoadResourceSynchronously(NetworkingContext* context, const ResourceRequest& request, StoredCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data) { if (!context || !context->isValid()) { ASSERT(false && "loadResourceSynchronously called with invalid networking context"); return; } // FIXME: clean up use of Frame now that we have NetworkingContext (see RIM Bug #1515) Frame* frame = static_cast<FrameNetworkingContextBlackBerry*>(context)->frame(); if (!frame || !frame->loader() || !frame->loader()->client() || !frame->page()) { ASSERT(false && "loadResourceSynchronously called without a frame or frame client"); return; } PageGroupLoadDeferrer deferrer(frame->page(), true); TimerBase::fireTimersInNestedEventLoop(); int playerId = static_cast<FrameLoaderClientBlackBerry*>(frame->loader()->client())->playerId(); WebCoreSynchronousLoader syncLoader; bool defersLoading = false; bool shouldContentSniff = false; RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(context, request, &syncLoader, defersLoading, shouldContentSniff)); int status = NetworkManager::instance()->startJob(playerId, handle, frame, defersLoading); if (status != BlackBerry::Platform::FilterStream::StatusSuccess) { handle->cancel(); error = ResourceError(ResourceError::platformErrorDomain, status, request.url().string(), BlackBerry::Platform::String::emptyString()); return; } const double syncLoadTimeOut = 60; // seconds double startTime = currentTime(); EventLoop loop; while (!syncLoader.isDone() && !loop.ended()) { loop.cycle(); if (currentTime() - startTime > syncLoadTimeOut) { handle->cancel(); error = ResourceError(ResourceError::platformErrorDomain, BlackBerry::Platform::FilterStream::StatusNetworkError, request.url().string(), "Time out"); return; } } error = syncLoader.resourceError(); data = syncLoader.data(); response = syncLoader.resourceResponse(); }
bool Chrome::runJavaScriptPrompt(Frame* frame, const String& prompt, const String& defaultValue, String& result) { willRunModalDialog(frame, ChromeClient::PromptDialog, m_client); // Defer loads in case the client method runs a new event loop that would // otherwise cause the load to continue while we're in the middle of executing JavaScript. PageGroupLoadDeferrer deferrer(m_page, true); ASSERT(frame); bool ok = m_client->runJavaScriptPrompt(frame, frame->displayStringModifiedByEncoding(prompt), frame->displayStringModifiedByEncoding(defaultValue), result); if (ok) result = frame->displayStringModifiedByEncoding(result); return ok; }
Page* ChromeClientBlackBerry::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures& features, const NavigationAction&) { #if ENABLE_DRT if (m_webPagePrivate->m_dumpRenderTree && !m_webPagePrivate->m_dumpRenderTree->allowsOpeningWindow()) return 0; #endif PageGroupLoadDeferrer deferrer(m_webPagePrivate->m_page, true); TimerBase::fireTimersInNestedEventLoop(); int x = features.xSet ? features.x : 0; int y = features.ySet ? features.y : 0; int width = features.widthSet? features.width : -1; int height = features.heightSet ? features.height : -1; unsigned flags = 0; if (features.menuBarVisible) flags |= WebPageClient::FlagWindowHasMenuBar; if (features.statusBarVisible) flags |= WebPageClient::FlagWindowHasStatusBar; if (features.toolBarVisible) flags |= WebPageClient::FlagWindowHasToolBar; if (features.locationBarVisible) flags |= WebPageClient::FlagWindowHasLocationBar; if (features.scrollbarsVisible) flags |= WebPageClient::FlagWindowHasScrollBar; if (features.resizable) flags |= WebPageClient::FlagWindowIsResizable; if (features.fullscreen) flags |= WebPageClient::FlagWindowIsFullScreen; if (features.dialog) flags |= WebPageClient::FlagWindowIsDialog; WebPage* webPage = m_webPagePrivate->m_client->createWindow(x, y, width, height, flags, WebString(request.resourceRequest().url().string()), WebString(request.frameName())); if (!webPage) return 0; #if ENABLE_DRT if (m_webPagePrivate->m_dumpRenderTree) m_webPagePrivate->m_dumpRenderTree->windowCreated(webPage); #endif return webPage->d->m_page; }
void ChromeClientBlackBerry::runOpenPanel(WebCore::Frame*, WTF::PassRefPtr<WebCore::FileChooser> chooser) { PageGroupLoadDeferrer deferrer(m_webPage->d->m_page, true); TimerBase::fireTimersInNestedEventLoop(); SharedArray<WebString> initialFiles; unsigned int initialFileSize = chooser->filenames().size(); if (initialFileSize > 0) initialFiles.reset(new WebString[initialFileSize]); for (int i = 0; i < initialFileSize; ++i) initialFiles[i] = chooser->filenames()[i]; SharedArray<WebString> chosenFiles; unsigned int chosenFileSize; if (m_webPage->client()->chooseFilenames(chooser->allowsMultipleFiles(), chooser->acceptTypes(), initialFiles, initialFileSize, chosenFiles, chosenFileSize)) { Vector<WTF::String> files(chosenFileSize); for (int i = 0; i < chosenFileSize; ++i) files[i] = chosenFiles[i]; chooser->chooseFiles(files); } }
Page* ChromeClientBlackBerry::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures& features) { PageGroupLoadDeferrer deferrer(m_webPage->d->m_page, true); TimerBase::fireTimersInNestedEventLoop(); int x = features.xSet ? features.x : 0; int y = features.ySet ? features.y : 0; int width = features.widthSet? features.width : -1; int height = features.heightSet ? features.height : -1; unsigned flags = 0; if (features.menuBarVisible) flags |= Olympia::WebKit::WebPageClient::FlagWindowHasMenuBar; if (features.statusBarVisible) flags |= Olympia::WebKit::WebPageClient::FlagWindowHasStatusBar; if (features.toolBarVisible) flags |= Olympia::WebKit::WebPageClient::FlagWindowHasToolBar; if (features.locationBarVisible) flags |= Olympia::WebKit::WebPageClient::FlagWindowHasLocationBar; if (features.scrollbarsVisible) flags |= Olympia::WebKit::WebPageClient::FlagWindowHasScrollBar; if (features.resizable) flags |= Olympia::WebKit::WebPageClient::FlagWindowIsResizable; if (features.fullscreen) flags |= Olympia::WebKit::WebPageClient::FlagWindowIsFullScreen; if (features.dialog) flags |= Olympia::WebKit::WebPageClient::FlagWindowIsDialog; Olympia::WebKit::WebPage* webPage = m_webPage->client()->createWindow(x, y, width, height, flags); if (!webPage) return 0; Page* newPage = webPage->d->m_page; if (!request.resourceRequest().isNull()) newPage->mainFrame()->loader()->load(request.resourceRequest(), false); return newPage; }
void ChromeClientBlackBerry::runOpenPanel(Frame*, PassRefPtr<FileChooser> chooser) { SharedArray<BlackBerry::Platform::String> initialFiles; unsigned numberOfInitialFiles = chooser->settings().selectedFiles.size(); if (numberOfInitialFiles > 0) initialFiles.reset(new BlackBerry::Platform::String[numberOfInitialFiles], numberOfInitialFiles); for (unsigned i = 0; i < numberOfInitialFiles; ++i) initialFiles[i] = chooser->settings().selectedFiles[i]; SharedArray<BlackBerry::Platform::String> acceptMIMETypes; unsigned numberOfTypes = chooser->settings().acceptMIMETypes.size(); if (numberOfTypes > 0) acceptMIMETypes.reset(new BlackBerry::Platform::String[numberOfTypes], numberOfTypes); for (unsigned i = 0; i < numberOfTypes; ++i) acceptMIMETypes[i] = chooser->settings().acceptMIMETypes[i]; BlackBerry::Platform::String capture; #if ENABLE(MEDIA_CAPTURE) capture = chooser->settings().capture; #endif SharedArray<BlackBerry::Platform::String> chosenFiles; { PageGroupLoadDeferrer deferrer(m_webPagePrivate->m_page, true); TimerBase::fireTimersInNestedEventLoop(); if (!m_webPagePrivate->m_client->chooseFilenames(chooser->settings().allowsMultipleFiles, acceptMIMETypes, initialFiles, capture, chosenFiles)) return; } Vector<String> files(chosenFiles.length()); for (unsigned i = 0; i < chosenFiles.length(); ++i) files[i] = chosenFiles[i]; chooser->chooseFiles(files); }
void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame* frame) { if (!frame || !frame->loader() || !frame->loader()->client() || !frame->page()) { ASSERT(false && "loadResourceSynchronously called without a frame or frame client"); return; } PageGroupLoadDeferrer deferrer(frame->page(), true); int playerId = static_cast<FrameLoaderClientBlackBerry*>(frame->loader()->client())->playerId(); WebCoreSynchronousLoader syncLoader; bool defersLoading = false; bool shouldContentSniff = false; RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, defersLoading, shouldContentSniff)); NetworkManager::instance()->startJob(playerId, handle, *frame, defersLoading); static const double s_syncLoadTimeOut = 60.0; // seconds double startTime = currentTime(); EventLoop loop; while (!syncLoader.isDone() && !loop.ended()) { loop.cycle(); if (currentTime() - startTime > s_syncLoadTimeOut) { handle->cancel(); error = ResourceError(ResourceError::platformErrorDomain, Olympia::Platform::IStream::StatusNetworkError, request.url().string(), "Time out"); return; } } error = syncLoader.resourceError(); data = syncLoader.data(); response = syncLoader.resourceResponse(); }