Index: Tools/DumpRenderTree/chromium/WebViewHost.cpp |
diff --git a/Tools/DumpRenderTree/chromium/WebViewHost.cpp b/Tools/DumpRenderTree/chromium/WebViewHost.cpp |
deleted file mode 100644 |
index a2dcb0e81900d136beacf1f04f890ba9aedba823..0000000000000000000000000000000000000000 |
--- a/Tools/DumpRenderTree/chromium/WebViewHost.cpp |
+++ /dev/null |
@@ -1,1008 +0,0 @@ |
-/* |
- * Copyright (C) 2010, 2011, 2012 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions are |
- * met: |
- * |
- * * Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * * Redistributions in binary form must reproduce the above |
- * copyright notice, this list of conditions and the following disclaimer |
- * in the documentation and/or other materials provided with the |
- * distribution. |
- * * Neither the name of Google Inc. nor the names of its |
- * contributors may be used to endorse or promote products derived from |
- * this software without specific prior written permission. |
- * |
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#include "config.h" |
-#include "WebViewHost.h" |
- |
-#include "DRTDevToolsAgent.h" |
-#include "Task.h" |
-#include "TestNavigationController.h" |
-#include "TestShell.h" |
-#include "WebCachedURLRequest.h" |
-#include "WebConsoleMessage.h" |
-#include "WebContextMenuData.h" |
-#include "WebDOMMessageEvent.h" |
-#include "WebDataSource.h" |
-#include "WebDocument.h" |
-#include "WebElement.h" |
-#include "WebFrame.h" |
-#include "WebHistoryItem.h" |
-#include "WebKit.h" |
-#include "WebNode.h" |
-#include "WebPluginParams.h" |
-#include "WebPopupMenu.h" |
-#include "WebPopupType.h" |
-#include "WebPrintParams.h" |
-#include "WebRange.h" |
-#include "WebScreenInfo.h" |
-#include "WebSerializedScriptValue.h" |
-#include "WebUserGestureIndicator.h" |
-#include "WebView.h" |
-#include "WebWindowFeatures.h" |
-#include "webkit/support/test_media_stream_client.h" |
-#include "webkit/support/webkit_support.h" |
-#include <cctype> |
-#include <clocale> |
-#include "public/platform/WebCString.h" |
-#include "public/platform/WebCompositorOutputSurface.h" |
-#include "public/platform/WebCompositorSupport.h" |
-#include "public/platform/WebDragData.h" |
-#include "public/platform/WebRect.h" |
-#include "public/platform/WebSize.h" |
-#include "public/platform/WebStorageNamespace.h" |
-#include "public/platform/WebThread.h" |
-#include "public/platform/WebURLRequest.h" |
-#include "public/platform/WebURLResponse.h" |
- |
-#include <wtf/Assertions.h> |
-#include <wtf/OwnArrayPtr.h> |
-#include <wtf/PassOwnPtr.h> |
-#include <wtf/Vector.h> |
- |
-using namespace WebCore; |
-using namespace WebKit; |
-using namespace WebTestRunner; |
-using namespace std; |
- |
-static const int screenWidth = 1920; |
-static const int screenHeight = 1080; |
- |
-const int WebViewHost::screenUnavailableBorder = 8; |
- |
-static int nextPageID = 1; |
- |
-// WebViewClient ------------------------------------------------------------- |
- |
-WebView* WebViewHost::createView(WebFrame* creator, const WebURLRequest&, const WebWindowFeatures&, const WebString&, WebNavigationPolicy) |
-{ |
- WebUserGestureIndicator::consumeUserGesture(); |
- return m_shell->createNewWindow(WebURL())->webView(); |
-} |
- |
-WebWidget* WebViewHost::createPopupMenu(WebPopupType type) |
-{ |
- switch (type) { |
- case WebKit::WebPopupTypeNone: |
- case WebKit::WebPopupTypePage: |
- case WebKit::WebPopupTypeHelperPlugin: |
- break; |
- case WebKit::WebPopupTypeSelect: |
- case WebKit::WebPopupTypeSuggestion: |
- m_popupmenus.append(WebPopupMenu::create(0)); |
- return m_popupmenus.last(); |
- } |
- return 0; |
-} |
- |
-WebWidget* WebViewHost::createPopupMenu(const WebPopupMenuInfo&) |
-{ |
- // Do not use this method. It's been replaced by createExternalPopupMenu. |
- ASSERT_NOT_REACHED(); |
- return 0; |
-} |
- |
-WebStorageNamespace* WebViewHost::createSessionStorageNamespace(unsigned quota) |
-{ |
- return webkit_support::CreateSessionStorageNamespace(quota); |
-} |
- |
-void WebViewHost::didAddMessageToConsole(const WebConsoleMessage& message, const WebString& sourceName, unsigned sourceLine) |
-{ |
-} |
- |
-void WebViewHost::didStartLoading() |
-{ |
-} |
- |
-void WebViewHost::didStopLoading() |
-{ |
-} |
- |
-bool WebViewHost::shouldBeginEditing(const WebRange& range) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::shouldEndEditing(const WebRange& range) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::shouldInsertNode(const WebNode& node, const WebRange& range, WebEditingAction action) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::shouldInsertText(const WebString& text, const WebRange& range, WebEditingAction action) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::shouldChangeSelectedRange( |
- const WebRange& fromRange, const WebRange& toRange, WebTextAffinity affinity, bool stillSelecting) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::shouldDeleteRange(const WebRange& range) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::shouldApplyStyle(const WebString& style, const WebRange& range) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::handleCurrentKeyboardEvent() |
-{ |
- if (m_editCommandName.empty()) |
- return false; |
- WebFrame* frame = webView()->focusedFrame(); |
- if (!frame) |
- return false; |
- |
- return frame->executeCommand(WebString::fromUTF8(m_editCommandName), WebString::fromUTF8(m_editCommandValue)); |
-} |
- |
-// WebKit::WebPrerendererClient |
- |
-void WebViewHost::willAddPrerender(WebKit::WebPrerender*) |
-{ |
-} |
- |
- |
-void WebViewHost::runModalAlertDialog(WebFrame*, const WebString& message) |
-{ |
-} |
- |
-bool WebViewHost::runModalConfirmDialog(WebFrame*, const WebString& message) |
-{ |
- return true; |
-} |
- |
-bool WebViewHost::runModalPromptDialog(WebFrame* frame, const WebString& message, |
- const WebString& defaultValue, WebString*) |
-{ |
- return true; |
-} |
- |
-void WebViewHost::showContextMenu(WebFrame*, const WebContextMenuData& contextMenuData) |
-{ |
-} |
- |
-void WebViewHost::didUpdateLayout() |
-{ |
-#if OS(DARWIN) |
- static bool queryingPreferredSize = false; |
- if (queryingPreferredSize) |
- return; |
- |
- queryingPreferredSize = true; |
- // Query preferred width to emulate the same functionality in Chromium: |
- // see RenderView::CheckPreferredSize (src/content/renderer/render_view.cc) |
- // and TabContentsViewMac::RenderViewCreated (src/chrome/browser/tab_contents/tab_contents_view_mac.mm) |
- webView()->contentsPreferredMinimumSize(); |
- queryingPreferredSize = false; |
-#endif |
-} |
- |
-void WebViewHost::navigateBackForwardSoon(int offset) |
-{ |
- navigationController()->goToOffset(offset); |
-} |
- |
-int WebViewHost::historyBackListCount() |
-{ |
- return navigationController()->lastCommittedEntryIndex(); |
-} |
- |
-int WebViewHost::historyForwardListCount() |
-{ |
- int currentIndex =navigationController()->lastCommittedEntryIndex(); |
- return navigationController()->entryCount() - currentIndex - 1; |
-} |
- |
-// WebWidgetClient ----------------------------------------------------------- |
- |
-void WebViewHost::didAutoResize(const WebSize& newSize) |
-{ |
- // Purposely don't include the virtualWindowBorder in this case so that |
- // window.inner[Width|Height] is the same as window.outer[Width|Height] |
- setWindowRect(WebRect(0, 0, newSize.width, newSize.height)); |
-} |
- |
-class WebViewHostDRTLayerTreeViewClient : public webkit_support::DRTLayerTreeViewClient { |
-public: |
- explicit WebViewHostDRTLayerTreeViewClient(WebViewHost* host) |
- : m_host(host) { } |
- virtual ~WebViewHostDRTLayerTreeViewClient() { } |
- |
- virtual void Layout() { m_host->webView()->layout(); } |
- virtual void ScheduleComposite() { m_host->proxy()->scheduleComposite(); } |
- |
-private: |
- WebViewHost* m_host; |
-}; |
- |
-void WebViewHost::initializeLayerTreeView() |
-{ |
- m_layerTreeViewClient = adoptPtr(new WebViewHostDRTLayerTreeViewClient(this)); |
- if (m_shell->softwareCompositingEnabled()) { |
- m_layerTreeView = adoptPtr(webkit_support::CreateLayerTreeView( |
- webkit_support::SOFTWARE_CONTEXT, |
- m_layerTreeViewClient.get(), |
- m_shell->webCompositorThread())); |
- } else { |
- m_layerTreeView = adoptPtr(webkit_support::CreateLayerTreeView( |
- webkit_support::MESA_CONTEXT, |
- m_layerTreeViewClient.get(), |
- m_shell->webCompositorThread())); |
- } |
- |
- ASSERT(m_layerTreeView); |
- updateViewportSize(); |
- m_layerTreeView->setSurfaceReady(); |
-} |
- |
-WebLayerTreeView* WebViewHost::layerTreeView() |
-{ |
- return m_layerTreeView.get(); |
-} |
- |
-void WebViewHost::scheduleAnimation() |
-{ |
- if (m_finished) { |
- return; |
- } |
- if (!m_animateScheduled) { |
- m_animateScheduled = true; |
- postDelayedTask(new HostMethodTask(this, &WebViewHost::animateNow), 1); |
- } |
-} |
- |
-void WebViewHost::animateNow() |
-{ |
- if (m_animateScheduled) { |
- m_animateScheduled = false; |
- webView()->animate(0.0); |
- } |
-} |
- |
-void WebViewHost::didFocus() |
-{ |
-} |
- |
-void WebViewHost::didBlur() |
-{ |
-} |
- |
-WebScreenInfo WebViewHost::screenInfo() |
-{ |
- // We don't need to set actual values. |
- WebScreenInfo info; |
- info.depth = 24; |
- info.depthPerComponent = 8; |
- info.isMonochrome = false; |
- info.rect = WebRect(0, 0, screenWidth, screenHeight); |
- // Use values different from info.rect for testing. |
- info.availableRect = WebRect(screenUnavailableBorder, screenUnavailableBorder, |
- screenWidth - screenUnavailableBorder * 2, |
- screenHeight - screenUnavailableBorder * 2); |
- return info; |
-} |
- |
-void WebViewHost::show(WebNavigationPolicy) |
-{ |
- m_hasWindow = true; |
-} |
- |
- |
- |
-void WebViewHost::closeWidget() |
-{ |
- m_hasWindow = false; |
- m_shell->closeWindow(this); |
- // No more code here, we should be deleted at this point. |
-} |
- |
-void WebViewHost::closeWidgetSoon() |
-{ |
- postDelayedTask(new HostMethodTask(this, &WebViewHost::closeWidget), 0); |
-} |
- |
-void WebViewHost::didChangeCursor(const WebCursorInfo& cursorInfo) |
-{ |
- if (!hasWindow()) |
- return; |
- m_currentCursor = cursorInfo; |
-} |
- |
-WebRect WebViewHost::windowRect() |
-{ |
- return m_windowRect; |
-} |
- |
-void WebViewHost::setWindowRect(const WebRect& rect) |
-{ |
- m_windowRect = rect; |
- const int border2 = TestShell::virtualWindowBorder * 2; |
- if (m_windowRect.width <= border2) |
- m_windowRect.width = 1 + border2; |
- if (m_windowRect.height <= border2) |
- m_windowRect.height = 1 + border2; |
- int width = m_windowRect.width - border2; |
- int height = m_windowRect.height - border2; |
- webWidget()->resize(WebSize(width, height)); |
- updateViewportSize(); |
-} |
- |
-WebRect WebViewHost::rootWindowRect() |
-{ |
- return windowRect(); |
-} |
- |
-WebRect WebViewHost::windowResizerRect() |
-{ |
- // Not necessary. |
- return WebRect(); |
-} |
- |
-void WebViewHost::runModal() |
-{ |
- if (m_shell->isDisplayingModalDialog()) { |
- // DumpRenderTree doesn't support real modal dialogs, so a test shouldn't try to start two modal dialogs at the same time. |
- ASSERT_NOT_REACHED(); |
- return; |
- } |
- // This WebViewHost might get deleted before RunMessageLoop() returns, so keep a copy of the m_shell member variable around. |
- ASSERT(m_shell->webViewHost() != this); |
- TestShell* shell = m_shell; |
- shell->setIsDisplayingModalDialog(true); |
- bool oldState = webkit_support::MessageLoopNestableTasksAllowed(); |
- webkit_support::MessageLoopSetNestableTasksAllowed(true); |
- m_inModalLoop = true; |
- webkit_support::RunMessageLoop(); |
- webkit_support::MessageLoopSetNestableTasksAllowed(oldState); |
- shell->setIsDisplayingModalDialog(false); |
-} |
- |
-bool WebViewHost::enterFullScreen() |
-{ |
- postDelayedTask(new HostMethodTask(this, &WebViewHost::enterFullScreenNow), 0); |
- return true; |
-} |
- |
-void WebViewHost::exitFullScreen() |
-{ |
- postDelayedTask(new HostMethodTask(this, &WebViewHost::exitFullScreenNow), 0); |
-} |
- |
-// WebFrameClient ------------------------------------------------------------ |
- |
-WebPlugin* WebViewHost::createPlugin(WebFrame* frame, const WebPluginParams& params) |
-{ |
- return webkit_support::CreateWebPlugin(frame, params); |
-} |
- |
-WebApplicationCacheHost* WebViewHost::createApplicationCacheHost(WebFrame* frame, WebApplicationCacheHostClient* client) |
-{ |
- return webkit_support::CreateApplicationCacheHost(frame, client); |
-} |
- |
-void WebViewHost::loadURLExternally(WebFrame* frame, const WebURLRequest& request, WebNavigationPolicy policy) |
-{ |
- loadURLExternally(frame, request, policy, WebString()); |
-} |
- |
-void WebViewHost::loadURLExternally(WebFrame*, const WebURLRequest& request, WebNavigationPolicy policy, const WebString& downloadName) |
-{ |
- ASSERT(policy != WebKit::WebNavigationPolicyCurrentTab); |
- WebViewHost* another = m_shell->createNewWindow(request.url()); |
- if (another) |
- another->show(policy); |
-} |
- |
-WebNavigationPolicy WebViewHost::decidePolicyForNavigation( |
- WebFrame*, const WebURLRequest&, WebNavigationType, WebNavigationPolicy defaultPolicy, bool) |
-{ |
- return defaultPolicy; |
-} |
- |
-WebURLError WebViewHost::cancelledError(WebFrame*, const WebURLRequest& request) |
-{ |
- return webkit_support::CreateCancelledError(request); |
-} |
- |
-void WebViewHost::unableToImplementPolicyWithError(WebFrame* frame, const WebURLError& error) |
-{ |
-} |
- |
-void WebViewHost::didCreateDataSource(WebFrame*, WebDataSource* ds) |
-{ |
- ds->setExtraData(m_pendingExtraData.leakPtr()); |
-} |
- |
-void WebViewHost::didCommitProvisionalLoad(WebFrame* frame, bool isNewNavigation) |
-{ |
- updateForCommittedLoad(frame, isNewNavigation); |
-} |
- |
-void WebViewHost::didClearWindowObject(WebFrame* frame) |
-{ |
- m_shell->bindJSObjectsToWindow(frame); |
-} |
- |
-void WebViewHost::didReceiveTitle(WebFrame* frame, const WebString& title, WebTextDirection direction) |
-{ |
- setPageTitle(title); |
-} |
- |
-void WebViewHost::didChangeIcon(WebFrame* , WebIconURL::Type) |
-{ |
-} |
- |
-void WebViewHost::didNavigateWithinPage(WebFrame* frame, bool isNewNavigation) |
-{ |
- frame->dataSource()->setExtraData(m_pendingExtraData.leakPtr()); |
- |
- updateForCommittedLoad(frame, isNewNavigation); |
-} |
- |
-void WebViewHost::willSendRequest(WebFrame* frame, unsigned, WebURLRequest& request, const WebURLResponse&) |
-{ |
- if (request.url().isEmpty()) |
- return; |
- |
- request.setExtraData(webkit_support::CreateWebURLRequestExtraData(frame->document().referrerPolicy())); |
-} |
- |
-void WebViewHost::openFileSystem(WebFrame* frame, WebFileSystemType type, long long size, bool create, WebFileSystemCallbacks* callbacks) |
-{ |
- webkit_support::OpenFileSystem(frame, type, size, create, callbacks); |
-} |
- |
-void WebViewHost::deleteFileSystem(WebKit::WebFrame* frame, WebKit::WebFileSystemType type, WebKit::WebFileSystemCallbacks* callbacks) |
-{ |
- webkit_support::DeleteFileSystem(frame, type, callbacks); |
-} |
- |
-bool WebViewHost::willCheckAndDispatchMessageEvent(WebFrame* sourceFrame, WebFrame* targetFrame, WebSecurityOrigin target, WebDOMMessageEvent event) |
-{ |
- return false; |
-} |
- |
-// WebTestDelegate ------------------------------------------------------------ |
- |
-void WebViewHost::setEditCommand(const string& name, const string& value) |
-{ |
- m_editCommandName = name; |
- m_editCommandValue = value; |
-} |
- |
-void WebViewHost::clearEditCommand() |
-{ |
- m_editCommandName.clear(); |
- m_editCommandValue.clear(); |
-} |
- |
-void WebViewHost::setGamepadData(const WebGamepads& pads) |
-{ |
- webkit_support::SetGamepadData(pads); |
-} |
- |
-void WebViewHost::printMessage(const std::string& message) |
-{ |
- printf("%s", message.c_str()); |
-} |
- |
-void WebViewHost::postTask(WebTask* task) |
-{ |
- ::postTask(task); |
-} |
- |
-void WebViewHost::postDelayedTask(WebTask* task, long long ms) |
-{ |
- ::postDelayedTask(task, ms); |
-} |
- |
-WebString WebViewHost::registerIsolatedFileSystem(const WebVector<WebString>& absoluteFilenames) |
-{ |
- return webkit_support::RegisterIsolatedFileSystem(absoluteFilenames); |
-} |
- |
-long long WebViewHost::getCurrentTimeInMillisecond() |
-{ |
- return webkit_support::GetCurrentTimeInMillisecond(); |
-} |
- |
-WebKit::WebString WebViewHost::getAbsoluteWebStringFromUTF8Path(const std::string& path) |
-{ |
- return webkit_support::GetAbsoluteWebStringFromUTF8Path(path); |
-} |
- |
-WebURL WebViewHost::localFileToDataURL(const WebKit::WebURL& url) |
-{ |
- return webkit_support::LocalFileToDataURL(url); |
-} |
- |
-WebURL WebViewHost::rewriteLayoutTestsURL(const std::string& url) |
-{ |
- return webkit_support::RewriteLayoutTestsURL(url); |
-} |
- |
-WebPreferences* WebViewHost::preferences() |
-{ |
- return m_shell->preferences(); |
-} |
- |
-void WebViewHost::applyPreferences() |
-{ |
- m_shell->applyPreferences(); |
-} |
- |
-std::string WebViewHost::makeURLErrorDescription(const WebKit::WebURLError& error) |
-{ |
- return webkit_support::MakeURLErrorDescription(error); |
-} |
- |
-void WebViewHost::showDevTools() |
-{ |
- m_shell->showDevTools(); |
-} |
- |
-void WebViewHost::closeDevTools() |
-{ |
- m_shell->closeDevTools(); |
-} |
- |
-void WebViewHost::evaluateInWebInspector(long callID, const std::string& script) |
-{ |
- m_shell->drtDevToolsAgent()->evaluateInWebInspector(callID, script); |
-} |
- |
-void WebViewHost::clearAllDatabases() |
-{ |
- webkit_support::ClearAllDatabases(); |
-} |
- |
-void WebViewHost::setDatabaseQuota(int quota) |
-{ |
- webkit_support::SetDatabaseQuota(quota); |
-} |
- |
-void WebViewHost::setDeviceScaleFactor(float deviceScaleFactor) |
-{ |
- webView()->setDeviceScaleFactor(deviceScaleFactor); |
- updateViewportSize(); |
-} |
- |
-void WebViewHost::setFocus(WebTestProxyBase* proxy, bool focused) |
-{ |
- for (size_t i = 0; i < m_shell->windowList().size(); ++i) { |
- if (m_shell->windowList()[i]->proxy() == proxy) |
- m_shell->setFocus(m_shell->windowList()[i]->webWidget(), focused); |
- } |
-} |
- |
-void WebViewHost::setAcceptAllCookies(bool acceptCookies) |
-{ |
- webkit_support::SetAcceptAllCookies(acceptCookies); |
-} |
- |
-string WebViewHost::pathToLocalResource(const string& url) |
-{ |
-#if OS(WINDOWS) |
- if (!url.find("/tmp/")) { |
- // We want a temp file. |
- const unsigned tempPrefixLength = 5; |
- size_t bufferSize = MAX_PATH; |
- OwnArrayPtr<WCHAR> tempPath = adoptArrayPtr(new WCHAR[bufferSize]); |
- DWORD tempLength = ::GetTempPathW(bufferSize, tempPath.get()); |
- if (tempLength + url.length() - tempPrefixLength + 1 > bufferSize) { |
- bufferSize = tempLength + url.length() - tempPrefixLength + 1; |
- tempPath = adoptArrayPtr(new WCHAR[bufferSize]); |
- tempLength = GetTempPathW(bufferSize, tempPath.get()); |
- ASSERT(tempLength < bufferSize); |
- } |
- string resultPath(WebString(tempPath.get(), tempLength).utf8()); |
- resultPath.append(url.substr(tempPrefixLength)); |
- return resultPath; |
- } |
-#endif |
- |
- // Some layout tests use file://// which we resolve as a UNC path. Normalize |
- // them to just file:///. |
- string lowerUrl = url; |
- string result = url; |
- transform(lowerUrl.begin(), lowerUrl.end(), lowerUrl.begin(), ::tolower); |
- while (!lowerUrl.find("file:////")) { |
- result = result.substr(0, 8) + result.substr(9); |
- lowerUrl = lowerUrl.substr(0, 8) + lowerUrl.substr(9); |
- } |
- return webkit_support::RewriteLayoutTestsURL(result).spec(); |
-} |
- |
-void WebViewHost::setLocale(const std::string& locale) |
-{ |
- setlocale(LC_ALL, locale.c_str()); |
-} |
- |
-void WebViewHost::testFinished() |
-{ |
- m_finished = true; |
- m_shell->testFinished(this); |
-} |
- |
-void WebViewHost::closeRemainingWindows() |
-{ |
- m_shell->closeRemainingWindows(); |
-} |
- |
-int WebViewHost::navigationEntryCount() |
-{ |
- return m_shell->navigationEntryCount(); |
-} |
- |
-void WebViewHost::goToOffset(int offset) |
-{ |
- m_shell->goToOffset(offset); |
-} |
- |
-void WebViewHost::reload() |
-{ |
- m_shell->reload(); |
-} |
- |
-void WebViewHost::loadURLForFrame(const WebURL& url, const string& frameName) |
-{ |
- if (!url.isValid()) |
- return; |
- TestShell::resizeWindowForTest(this, url); |
- navigationController()->loadEntry(TestNavigationEntry::create(-1, url, WebString(), WebString::fromUTF8(frameName)).get()); |
-} |
- |
-bool WebViewHost::allowExternalPages() |
-{ |
- return m_shell->allowExternalPages(); |
-} |
- |
-void WebViewHost::captureHistoryForWindow(WebTestProxyBase* proxy, WebVector<WebHistoryItem>* history, size_t* currentEntryIndex) |
-{ |
- for (size_t i = 0; i < m_shell->windowList().size(); ++i) { |
- if (m_shell->windowList()[i]->proxy() == proxy) |
- m_shell->captureHistoryForWindow(i, history, currentEntryIndex); |
- } |
-} |
- |
-WebMediaPlayer* WebViewHost::createWebMediaPlayer(WebFrame* frame, const WebURL& url, WebMediaPlayerClient* client) |
-{ |
- return webkit_support::CreateMediaPlayer(frame, url, client, |
- testMediaStreamClient() |
- ); |
-} |
- |
-// Public functions ----------------------------------------------------------- |
- |
-WebViewHost::WebViewHost(TestShell* shell) |
- : m_shell(shell) |
- , m_proxy(0) |
- , m_webWidget(0) |
- , m_shutdownWasInvoked(false) |
-{ |
- reset(); |
-} |
- |
-WebViewHost::~WebViewHost() |
-{ |
- ASSERT(m_shutdownWasInvoked); |
- if (m_inModalLoop) |
- webkit_support::QuitMessageLoop(); |
-} |
- |
-void WebViewHost::shutdown() |
-{ |
- ASSERT(!m_shutdownWasInvoked); |
- |
- // DevTools frontend page is supposed to be navigated only once and |
- // loading another URL in that Page is an error. |
- if (m_shell->devToolsWebView() != this) { |
- // Navigate to an empty page to fire all the destruction logic for the |
- // current page. |
- loadURLForFrame(GURL("about:blank"), string()); |
- } |
- |
- for (Vector<WebKit::WebWidget*>::iterator it = m_popupmenus.begin(); |
- it < m_popupmenus.end(); ++it) |
- (*it)->close(); |
- |
- webWidget()->willCloseLayerTreeView(); |
- m_layerTreeView.clear(); |
- webWidget()->close(); |
- m_webWidget = 0; |
- m_shutdownWasInvoked = true; |
-} |
- |
-void WebViewHost::setWebWidget(WebKit::WebWidget* widget) |
-{ |
- m_webWidget = widget; |
- m_proxy->setWidget(widget); |
- webView()->setSpellCheckClient(proxy()->spellCheckClient()); |
- webView()->setValidationMessageClient(proxy()->validationMessageClient()); |
- webView()->setPrerendererClient(this); |
-} |
- |
-WebView* WebViewHost::webView() const |
-{ |
- ASSERT(m_webWidget); |
- // DRT does not support popup widgets. So m_webWidget is always a WebView. |
- return static_cast<WebView*>(m_webWidget); |
-} |
- |
-WebWidget* WebViewHost::webWidget() const |
-{ |
- ASSERT(m_webWidget); |
- return m_webWidget; |
-} |
- |
-WebTestProxyBase* WebViewHost::proxy() const |
-{ |
- ASSERT(m_proxy); |
- return m_proxy; |
-} |
- |
-void WebViewHost::setProxy(WebTestProxyBase* proxy) |
-{ |
- ASSERT(!m_proxy); |
- ASSERT(proxy); |
- m_proxy = proxy; |
-} |
- |
-void WebViewHost::reset() |
-{ |
- m_pageId = -1; |
- m_lastPageIdUpdated = -1; |
- m_hasWindow = false; |
- m_inModalLoop = false; |
- m_animateScheduled = false; |
- m_finished = false; |
- |
- m_navigationController = adoptPtr(new TestNavigationController(this)); |
- |
- m_pendingExtraData.clear(); |
- m_editCommandName.clear(); |
- m_editCommandValue.clear(); |
- |
- m_currentCursor = WebCursorInfo(); |
- m_windowRect = WebRect(); |
- // m_proxy is not set when reset() is invoked from the constructor. |
- if (m_proxy) |
- proxy()->reset(); |
- |
- if (m_webWidget) { |
- webView()->mainFrame()->setName(WebString()); |
- } |
-} |
- |
-void WebViewHost::setClientWindowRect(const WebKit::WebRect& rect) |
-{ |
- setWindowRect(rect); |
-} |
- |
-void WebViewHost::enableAutoResizeMode(const WebSize& minSize, const WebSize& maxSize) |
-{ |
- webView()->enableAutoResizeMode(minSize, maxSize); |
-} |
- |
-void WebViewHost::disableAutoResizeMode(const WebKit::WebSize& newSize) |
-{ |
- if (!newSize.isEmpty()) |
- setWindowRect(WebRect(0, 0, newSize.width, newSize.height)); |
- webView()->disableAutoResizeMode(); |
- if (!newSize.isEmpty()) |
- webView()->resize(newSize); |
-} |
- |
-bool WebViewHost::navigate(const TestNavigationEntry& entry, bool reload) |
-{ |
- // Get the right target frame for the entry. |
- WebFrame* frame = webView()->mainFrame(); |
- if (!entry.targetFrame().isEmpty()) |
- frame = webView()->findFrameByName(entry.targetFrame()); |
- |
- // TODO(mpcomplete): should we clear the target frame, or should |
- // back/forward navigations maintain the target frame? |
- |
- // A navigation resulting from loading a javascript URL should not be |
- // treated as a browser initiated event. Instead, we want it to look as if |
- // the page initiated any load resulting from JS execution. |
- if (!GURL(entry.URL()).SchemeIs("javascript")) |
- setPendingExtraData(adoptPtr(new TestShellExtraData(entry.pageID()))); |
- |
- // If we are reloading, then WebKit will use the state of the current page. |
- // Otherwise, we give it the state to navigate to. |
- if (reload) { |
- frame->reload(false); |
- } else if (!entry.contentState().isNull()) { |
- ASSERT(entry.pageID() != -1); |
- frame->loadHistoryItem(entry.contentState()); |
- } else { |
- ASSERT(entry.pageID() == -1); |
- frame->loadRequest(WebURLRequest(entry.URL())); |
- } |
- |
- // In case LoadRequest failed before DidCreateDataSource was called. |
- setPendingExtraData(nullptr); |
- |
- // Restore focus to the main frame prior to loading new request. |
- // This makes sure that we don't have a focused iframe. Otherwise, that |
- // iframe would keep focus when the SetFocus called immediately after |
- // LoadRequest, thus making some tests fail (see http://b/issue?id=845337 |
- // for more details). |
- webView()->setFocusedFrame(frame); |
- m_shell->setFocus(webView(), true); |
- |
- return true; |
-} |
- |
-// Private functions ---------------------------------------------------------- |
- |
-void WebViewHost::updateForCommittedLoad(WebFrame* frame, bool isNewNavigation) |
-{ |
- // Code duplicated from RenderView::DidCommitLoadForFrame. |
- TestShellExtraData* extraData = static_cast<TestShellExtraData*>(frame->dataSource()->extraData()); |
- const WebURL& url = frame->dataSource()->request().url(); |
- bool nonBlankPageAfterReset = m_pageId == -1 && !url.isEmpty() && strcmp(url.spec().data(), "about:blank"); |
- |
- if (isNewNavigation || nonBlankPageAfterReset) { |
- // New navigation. |
- updateSessionHistory(frame); |
- m_pageId = nextPageID++; |
- } else if (extraData && extraData->pendingPageID != -1 && !extraData->requestCommitted) { |
- // This is a successful session history navigation! |
- updateSessionHistory(frame); |
- m_pageId = extraData->pendingPageID; |
- } |
- |
- // Don't update session history multiple times. |
- if (extraData) |
- extraData->requestCommitted = true; |
- |
- updateURL(frame); |
-} |
- |
-void WebViewHost::updateURL(WebFrame* frame) |
-{ |
- WebDataSource* ds = frame->dataSource(); |
- ASSERT(ds); |
- const WebURLRequest& request = ds->request(); |
- RefPtr<TestNavigationEntry> entry(TestNavigationEntry::create()); |
- |
- // The referrer will be empty on https->http transitions. It |
- // would be nice if we could get the real referrer from somewhere. |
- entry->setPageID(m_pageId); |
- if (ds->hasUnreachableURL()) |
- entry->setURL(ds->unreachableURL()); |
- else |
- entry->setURL(request.url()); |
- |
- const WebHistoryItem& historyItem = frame->currentHistoryItem(); |
- if (!historyItem.isNull()) |
- entry->setContentState(historyItem); |
- |
- navigationController()->didNavigateToEntry(entry.get()); |
- m_lastPageIdUpdated = max(m_lastPageIdUpdated, m_pageId); |
-} |
- |
-void WebViewHost::updateSessionHistory(WebFrame* frame) |
-{ |
- // If we have a valid page ID at this point, then it corresponds to the page |
- // we are navigating away from. Otherwise, this is the first navigation, so |
- // there is no past session history to record. |
- if (m_pageId == -1) |
- return; |
- |
- TestNavigationEntry* entry = navigationController()->entryWithPageID(m_pageId); |
- if (!entry) |
- return; |
- |
- const WebHistoryItem& historyItem = webView()->mainFrame()->previousHistoryItem(); |
- if (historyItem.isNull()) |
- return; |
- |
- entry->setContentState(historyItem); |
-} |
- |
-void WebViewHost::updateViewportSize() |
-{ |
- if (!m_layerTreeView) |
- return; |
- |
- WebSize deviceViewportSize(webWidget()->size().width * webView()->deviceScaleFactor(), |
- webWidget()->size().height * webView()->deviceScaleFactor()); |
- m_layerTreeView->setViewportSize(webWidget()->size(), deviceViewportSize); |
-} |
- |
-void WebViewHost::printFrameDescription(WebFrame* webframe) |
-{ |
- string name8 = webframe->uniqueName().utf8(); |
- if (webframe == webView()->mainFrame()) { |
- if (!name8.length()) { |
- fputs("main frame", stdout); |
- return; |
- } |
- printf("main frame \"%s\"", name8.c_str()); |
- return; |
- } |
- if (!name8.length()) { |
- fputs("frame (anonymous)", stdout); |
- return; |
- } |
- printf("frame \"%s\"", name8.c_str()); |
-} |
- |
-void WebViewHost::setPendingExtraData(PassOwnPtr<TestShellExtraData> extraData) |
-{ |
- m_pendingExtraData = extraData; |
-} |
- |
-void WebViewHost::setPageTitle(const WebString&) |
-{ |
- // Nothing to do in layout test. |
-} |
- |
-void WebViewHost::enterFullScreenNow() |
-{ |
- webView()->willEnterFullScreen(); |
- webView()->didEnterFullScreen(); |
-} |
- |
-void WebViewHost::exitFullScreenNow() |
-{ |
- webView()->willExitFullScreen(); |
- webView()->didExitFullScreen(); |
-} |
- |
-webkit_support::TestMediaStreamClient* WebViewHost::testMediaStreamClient() |
-{ |
- if (!m_testMediaStreamClient.get()) |
- m_testMediaStreamClient = adoptPtr(new webkit_support::TestMediaStreamClient()); |
- return m_testMediaStreamClient.get(); |
-} |