Index: Tools/DumpRenderTree/chromium/TestShell.cpp |
diff --git a/Tools/DumpRenderTree/chromium/TestShell.cpp b/Tools/DumpRenderTree/chromium/TestShell.cpp |
deleted file mode 100644 |
index b711f34ae4a69d1cff4ecd8d4356820708afae55..0000000000000000000000000000000000000000 |
--- a/Tools/DumpRenderTree/chromium/TestShell.cpp |
+++ /dev/null |
@@ -1,563 +0,0 @@ |
-/* |
- * Copyright (C) 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 "TestShell.h" |
- |
-#include "DRTDevToolsAgent.h" |
-#include "DRTDevToolsClient.h" |
-#include "MockPlatform.h" |
-#include "MockWebPrerenderingSupport.h" |
-#include "WebArrayBufferView.h" |
-#include "WebDataSource.h" |
-#include "WebDocument.h" |
-#include "WebElement.h" |
-#include "WebFrame.h" |
-#include "WebHistoryItem.h" |
-#include "WebTestingSupport.h" |
-#include "WebSettings.h" |
-#include "WebTestProxy.h" |
-#include "WebTestRunner.h" |
-#include "WebView.h" |
-#include "WebViewHost.h" |
-#include "skia/ext/platform_canvas.h" |
-#include "webkit/support/webkit_support.h" |
-#include "webkit/support/webkit_support_gfx.h" |
-#include "public/platform/Platform.h" |
-#include "public/platform/WebCompositorSupport.h" |
-#include "public/platform/WebPoint.h" |
-#include "public/platform/WebSize.h" |
-#include "public/platform/WebString.h" |
-#include "public/platform/WebThread.h" |
-#include "public/platform/WebURLRequest.h" |
-#include "public/platform/WebURLResponse.h" |
-#include <algorithm> |
-#include <cctype> |
-#include <vector> |
-#include <wtf/MD5.h> |
-#include <wtf/OwnArrayPtr.h> |
- |
- |
-using namespace WebKit; |
-using namespace WebTestRunner; |
-using namespace std; |
- |
-// Content area size for newly created windows. |
-static const int testWindowWidth = 800; |
-static const int testWindowHeight = 600; |
- |
-// The W3C SVG layout tests use a different size than the other layout tests. |
-static const int SVGTestWindowWidth = 480; |
-static const int SVGTestWindowHeight = 360; |
- |
-static const char layoutTestsPattern[] = "/LayoutTests/"; |
-static const string::size_type layoutTestsPatternSize = sizeof(layoutTestsPattern) - 1; |
-static const char fileUrlPattern[] = "file:/"; |
-static const char fileTestPrefix[] = "(file test):"; |
-static const char dataUrlPattern[] = "data:"; |
-static const string::size_type dataUrlPatternSize = sizeof(dataUrlPattern) - 1; |
- |
-// FIXME: Move this to a common place so that it can be shared with |
-// WebCore::TransparencyWin::makeLayerOpaque(). |
-static void makeCanvasOpaque(SkCanvas* canvas) |
-{ |
- const SkBitmap& bitmap = canvas->getTopDevice()->accessBitmap(true); |
- ASSERT(bitmap.config() == SkBitmap::kARGB_8888_Config); |
- |
- SkAutoLockPixels lock(bitmap); |
- for (int y = 0; y < bitmap.height(); y++) { |
- uint32_t* row = bitmap.getAddr32(0, y); |
- for (int x = 0; x < bitmap.width(); x++) |
- row[x] |= 0xFF000000; // Set alpha bits to 1. |
- } |
-} |
- |
-TestShell::TestShell() |
- : m_testIsPending(false) |
- , m_testIsPreparing(false) |
- , m_focusedWidget(0) |
- , m_devTools(0) |
- , m_dumpPixelsForCurrentTest(false) |
- , m_allowExternalPages(false) |
- , m_acceleratedCompositingForVideoEnabled(false) |
- , m_acceleratedCompositingForFixedPositionEnabled(false) |
- , m_acceleratedCompositingForOverflowScrollEnabled(false) |
- , m_acceleratedCompositingForTransitionEnabled(false) |
- , m_softwareCompositingEnabled(false) |
- , m_threadedCompositingEnabled(false) |
- , m_forceCompositingMode(false) |
- , m_threadedHTMLParser(true) |
- , m_accelerated2dCanvasEnabled(false) |
- , m_perTilePaintingEnabled(false) |
- , m_deferredImageDecodingEnabled(false) |
- , m_stressOpt(false) |
- , m_stressDeopt(false) |
- , m_dumpWhenFinished(true) |
- , m_isDisplayingModalDialog(false) |
-{ |
- // 30 second is the same as the value in Mac DRT. |
- // If we use a value smaller than the timeout value of |
- // (new-)run-webkit-tests, (new-)run-webkit-tests misunderstands that a |
- // timed-out DRT process was crashed. |
- m_timeout = 30 * 1000; |
-} |
- |
-void TestShell::initialize(MockPlatform* platformSupport) |
-{ |
- m_testInterfaces = adoptPtr(new WebTestInterfaces()); |
- platformSupport->setInterfaces(m_testInterfaces.get()); |
- m_devToolsTestInterfaces = adoptPtr(new WebTestInterfaces()); |
- m_prerenderingSupport = adoptPtr(new MockWebPrerenderingSupport()); |
-#if !defined(USE_DEFAULT_RENDER_THEME) && (OS(WINDOWS) || OS(DARWIN)) |
- // Set theme engine. |
- webkit_support::SetThemeEngine(m_testInterfaces->themeEngine()); |
-#endif |
- |
- if (m_threadedCompositingEnabled) |
- m_webCompositorThread = adoptPtr(WebKit::Platform::current()->createThread("Compositor")); |
- webkit_support::SetThreadedCompositorEnabled(m_threadedCompositingEnabled); |
- |
- createMainWindow(); |
-} |
- |
-void TestShell::createMainWindow() |
-{ |
- m_drtDevToolsAgent = adoptPtr(new DRTDevToolsAgent); |
- m_webViewHost = adoptPtr(createNewWindow(WebURL(), m_drtDevToolsAgent.get(), m_testInterfaces.get())); |
- m_webView = m_webViewHost->webView(); |
- m_testInterfaces->setDelegate(m_webViewHost.get()); |
- m_testInterfaces->setWebView(m_webView, m_webViewHost->proxy()); |
- m_drtDevToolsAgent->setWebView(m_webView); |
-} |
- |
-TestShell::~TestShell() |
-{ |
- if (m_webViewHost) |
- m_webViewHost->shutdown(); |
- m_testInterfaces->setDelegate(0); |
- m_testInterfaces->setWebView(0, 0); |
- m_devToolsTestInterfaces->setDelegate(0); |
- m_devToolsTestInterfaces->setWebView(0, 0); |
- m_drtDevToolsAgent->setWebView(0); |
-} |
- |
-void TestShell::createDRTDevToolsClient(DRTDevToolsAgent* agent) |
-{ |
- m_drtDevToolsClient = adoptPtr(new DRTDevToolsClient(agent, m_devTools->webView())); |
-} |
- |
-void TestShell::showDevTools() |
-{ |
- if (!m_devTools) { |
- WebURL url = webkit_support::GetDevToolsPathAsURL(); |
- if (!url.isValid()) { |
- ASSERT(false); |
- return; |
- } |
- m_devTools = createNewWindow(url, 0, m_devToolsTestInterfaces.get()); |
- m_devTools->webView()->settings()->setMemoryInfoEnabled(true); |
- m_devTools->proxy()->setLogConsoleOutput(false); |
- m_devToolsTestInterfaces->setDelegate(m_devTools); |
- m_devToolsTestInterfaces->setWebView(m_devTools->webView(), m_devTools->proxy()); |
- ASSERT(m_devTools); |
- createDRTDevToolsClient(m_drtDevToolsAgent.get()); |
- } |
- m_devTools->show(WebKit::WebNavigationPolicyNewWindow); |
-} |
- |
-void TestShell::closeDevTools() |
-{ |
- if (m_devTools) { |
- m_devTools->webView()->settings()->setMemoryInfoEnabled(false); |
- m_drtDevToolsAgent->reset(); |
- m_drtDevToolsClient.clear(); |
- m_devToolsTestInterfaces->setDelegate(0); |
- m_devToolsTestInterfaces->setWebView(0, 0); |
- closeWindow(m_devTools); |
- m_devTools = 0; |
- } |
-} |
- |
-void TestShell::resetWebSettings(WebView& webView) |
-{ |
- m_prefs.reset(); |
- m_prefs.acceleratedCompositingEnabled = true; |
- m_prefs.acceleratedCompositingForVideoEnabled = m_acceleratedCompositingForVideoEnabled; |
- m_prefs.acceleratedCompositingForFixedPositionEnabled = m_acceleratedCompositingForFixedPositionEnabled; |
- m_prefs.acceleratedCompositingForOverflowScrollEnabled = m_acceleratedCompositingForOverflowScrollEnabled; |
- m_prefs.acceleratedCompositingForTransitionEnabled = m_acceleratedCompositingForTransitionEnabled; |
- m_prefs.forceCompositingMode = m_forceCompositingMode; |
- m_prefs.accelerated2dCanvasEnabled = m_accelerated2dCanvasEnabled; |
- m_prefs.perTilePaintingEnabled = m_perTilePaintingEnabled; |
- m_prefs.deferredImageDecodingEnabled = m_deferredImageDecodingEnabled; |
- m_prefs.threadedHTMLParser = m_threadedHTMLParser; |
- m_prefs.applyTo(&webView); |
-} |
- |
-void TestShell::runFileTest(const TestParams& params, bool shouldDumpPixels) |
-{ |
- ASSERT(params.testUrl.isValid()); |
- m_dumpPixelsForCurrentTest = shouldDumpPixels; |
- m_testIsPreparing = true; |
- m_testInterfaces->setTestIsRunning(true); |
- m_params = params; |
- string testUrl = m_params.testUrl.spec(); |
- m_testInterfaces->configureForTestWithURL(m_params.testUrl, shouldDumpPixels); |
- |
- if (testUrl.find("compositing/") != string::npos || testUrl.find("compositing\\") != string::npos) { |
- if (!m_softwareCompositingEnabled) |
- m_prefs.accelerated2dCanvasEnabled = true; |
- m_prefs.acceleratedCompositingForVideoEnabled = true; |
- m_prefs.mockScrollbarsEnabled = true; |
- m_prefs.applyTo(m_webView); |
- } |
- |
- if (m_dumpWhenFinished) |
- m_printer.handleTestHeader(testUrl.c_str()); |
- loadURL(m_params.testUrl); |
- |
- if (m_devTools) |
- this->setFocus(m_devTools->webView(), true); |
- |
- m_testIsPreparing = false; |
- waitTestFinished(); |
-} |
- |
-static inline bool isSVGTestURL(const WebURL& url) |
-{ |
- return url.isValid() && string(url.spec()).find("W3C-SVG-1.1") != string::npos; |
-} |
- |
-void TestShell::resizeWindowForTest(WebViewHost* window, const WebURL& url) |
-{ |
- int width, height; |
- if (isSVGTestURL(url)) { |
- width = SVGTestWindowWidth; |
- height = SVGTestWindowHeight; |
- } else { |
- width = testWindowWidth; |
- height = testWindowHeight; |
- } |
- window->setWindowRect(WebRect(WebViewHost::screenUnavailableBorder, WebViewHost::screenUnavailableBorder, width + virtualWindowBorder * 2, height + virtualWindowBorder * 2)); |
-} |
- |
-void TestShell::resetTestController() |
-{ |
- resetWebSettings(*webView()); |
- m_testInterfaces->resetAll(); |
- m_devToolsTestInterfaces->resetAll(); |
- m_webViewHost->reset(); |
- m_drtDevToolsAgent->reset(); |
- if (m_drtDevToolsClient) |
- m_drtDevToolsClient->reset(); |
- webView()->setPageScaleFactor(1, WebPoint(0, 0)); |
- webView()->enableFixedLayoutMode(false); |
- webView()->setFixedLayoutSize(WebSize(0, 0)); |
- webView()->mainFrame()->clearOpener(); |
- WebTestingSupport::resetInternalsObject(webView()->mainFrame()); |
-} |
- |
-void TestShell::loadURL(const WebURL& url) |
-{ |
- m_webViewHost->loadURLForFrame(url, string()); |
-} |
- |
-void TestShell::reload() |
-{ |
- m_webViewHost->navigationController()->reload(); |
-} |
- |
-void TestShell::goToOffset(int offset) |
-{ |
- m_webViewHost->navigationController()->goToOffset(offset); |
-} |
- |
-int TestShell::navigationEntryCount() const |
-{ |
- return m_webViewHost->navigationController()->entryCount(); |
-} |
- |
-void TestShell::callJSGC() |
-{ |
- m_webView->mainFrame()->collectGarbage(); |
-} |
- |
-void TestShell::setFocus(WebWidget* widget, bool enable) |
-{ |
- // Simulate the effects of InteractiveSetFocus(), which includes calling |
- // both setFocus() and setIsActive(). |
- if (enable) { |
- if (m_focusedWidget != widget) { |
- if (m_focusedWidget) |
- m_focusedWidget->setFocus(false); |
- webView()->setIsActive(enable); |
- widget->setFocus(enable); |
- m_focusedWidget = widget; |
- } |
- } else { |
- if (m_focusedWidget == widget) { |
- widget->setFocus(enable); |
- webView()->setIsActive(enable); |
- m_focusedWidget = 0; |
- } |
- } |
-} |
- |
-void TestShell::testFinished(WebViewHost* host) |
-{ |
- if (host == m_devTools) |
- return; |
- |
- if (!m_testIsPending) |
- return; |
- m_testIsPending = false; |
- m_testInterfaces->setTestIsRunning(false); |
- if (m_dumpWhenFinished) |
- dump(); |
- webkit_support::QuitMessageLoop(); |
-} |
- |
-void TestShell::testTimedOut() |
-{ |
- m_printer.handleTimedOut(); |
- testFinished(webViewHost()); |
-} |
- |
-void TestShell::dump() |
-{ |
- // Dump the requested representation. |
- WebFrame* frame = m_webView->mainFrame(); |
- if (!frame) |
- return; |
- bool shouldDumpAsAudio = m_testInterfaces->testRunner()->shouldDumpAsAudio(); |
- bool shouldGeneratePixelResults = m_testInterfaces->testRunner()->shouldGeneratePixelResults(); |
- bool dumpedAnything = false; |
- |
- if (shouldDumpAsAudio) { |
- const WebKit::WebArrayBufferView* webArrayBufferView = m_testInterfaces->testRunner()->audioData(); |
- m_printer.handleAudio(webArrayBufferView->baseAddress(), webArrayBufferView->byteLength()); |
- m_printer.handleAudioFooter(); |
- m_printer.handleTestFooter(true); |
- |
- fflush(stdout); |
- fflush(stderr); |
- return; |
- } |
- |
- if (m_params.dumpTree) { |
- dumpedAnything = true; |
- m_printer.handleTextHeader(); |
- string dataUtf8 = m_webViewHost->proxy()->captureTree(m_params.debugRenderTree); |
- if (fwrite(dataUtf8.c_str(), 1, dataUtf8.size(), stdout) != dataUtf8.size()) |
- FATAL("Short write to stdout, disk full?\n"); |
- } |
- if (dumpedAnything && m_params.printSeparators) |
- m_printer.handleTextFooter(); |
- |
- if (m_dumpPixelsForCurrentTest && shouldGeneratePixelResults) { |
- // Image output: we write the image data to the file given on the |
- // command line (for the dump pixels argument), and the MD5 sum to |
- // stdout. |
- dumpedAnything = true; |
- dumpImage(m_webViewHost->proxy()->capturePixels()); |
- } |
- m_printer.handleTestFooter(dumpedAnything); |
- fflush(stdout); |
- fflush(stderr); |
-} |
- |
-void TestShell::dumpImage(SkCanvas* canvas) const |
-{ |
- // Fix the alpha. The expected PNGs on Mac have an alpha channel, so we want |
- // to keep it. On Windows, the alpha channel is wrong since text/form control |
- // drawing may have erased it in a few places. So on Windows we force it to |
- // opaque and also don't write the alpha channel for the reference. Linux |
- // doesn't have the wrong alpha like Windows, but we match Windows. |
-#if OS(DARWIN) |
- bool discardTransparency = false; |
-#else |
- bool discardTransparency = true; |
- makeCanvasOpaque(canvas); |
-#endif |
- |
- const SkBitmap& sourceBitmap = canvas->getTopDevice()->accessBitmap(false); |
- SkAutoLockPixels sourceBitmapLock(sourceBitmap); |
- |
- // Compute MD5 sum. |
- MD5 digester; |
- Vector<uint8_t, 16> digestValue; |
-#if OS(ANDROID) |
- // On Android, pixel layout is RGBA (see third_party/skia/include/core/SkColorPriv.h); |
- // however, other Chrome platforms use BGRA (see skia/config/SkUserConfig.h). |
- // To match the checksum of other Chrome platforms, we need to reorder the layout of pixels. |
- // NOTE: The following code assumes we use SkBitmap::kARGB_8888_Config, |
- // which has been checked in device.makeOpaque() (see above). |
- const uint8_t* rawPixels = reinterpret_cast<const uint8_t*>(sourceBitmap.getPixels()); |
- size_t bitmapSize = sourceBitmap.getSize(); |
- OwnArrayPtr<uint8_t> reorderedPixels = adoptArrayPtr(new uint8_t[bitmapSize]); |
- for (size_t i = 0; i < bitmapSize; i += 4) { |
- reorderedPixels[i] = rawPixels[i + 2]; // R |
- reorderedPixels[i + 1] = rawPixels[i + 1]; // G |
- reorderedPixels[i + 2] = rawPixels[i]; // B |
- reorderedPixels[i + 3] = rawPixels[i + 3]; // A |
- } |
- digester.addBytes(reorderedPixels.get(), bitmapSize); |
- reorderedPixels.clear(); |
-#else |
- digester.addBytes(reinterpret_cast<const uint8_t*>(sourceBitmap.getPixels()), sourceBitmap.getSize()); |
-#endif |
- digester.checksum(digestValue); |
- string md5hash; |
- md5hash.reserve(16 * 2); |
- for (unsigned i = 0; i < 16; ++i) { |
- char hex[3]; |
- // Use "x", not "X". The string must be lowercased. |
- sprintf(hex, "%02x", digestValue[i]); |
- md5hash.append(hex); |
- } |
- |
- // Only encode and dump the png if the hashes don't match. Encoding the |
- // image is really expensive. |
- if (md5hash.compare(m_params.pixelHash)) { |
- std::vector<unsigned char> png; |
-#if OS(ANDROID) |
- webkit_support::EncodeRGBAPNGWithChecksum(reinterpret_cast<const unsigned char*>(sourceBitmap.getPixels()), sourceBitmap.width(), |
- sourceBitmap.height(), static_cast<int>(sourceBitmap.rowBytes()), discardTransparency, md5hash, &png); |
-#else |
- webkit_support::EncodeBGRAPNGWithChecksum(reinterpret_cast<const unsigned char*>(sourceBitmap.getPixels()), sourceBitmap.width(), |
- sourceBitmap.height(), static_cast<int>(sourceBitmap.rowBytes()), discardTransparency, md5hash, &png); |
-#endif |
- |
- m_printer.handleImage(md5hash.c_str(), m_params.pixelHash.c_str(), &png[0], png.size()); |
- } else |
- m_printer.handleImage(md5hash.c_str(), m_params.pixelHash.c_str(), 0, 0); |
-} |
- |
-void TestShell::bindJSObjectsToWindow(WebFrame* frame) |
-{ |
- WebTestingSupport::injectInternalsObject(frame); |
- if (m_devTools && m_devTools->webView() == frame->view()) |
- m_devToolsTestInterfaces->bindTo(frame); |
- else |
- m_testInterfaces->bindTo(frame); |
-} |
- |
-WebViewHost* TestShell::createNewWindow(const WebKit::WebURL& url) |
-{ |
- return createNewWindow(url, 0, m_testInterfaces.get()); |
-} |
- |
-WebViewHost* TestShell::createNewWindow(const WebKit::WebURL& url, DRTDevToolsAgent* devToolsAgent, WebTestInterfaces *testInterfaces) |
-{ |
- WebTestProxy<WebViewHost, TestShell*>* host = new WebTestProxy<WebViewHost, TestShell*>(this); |
- host->setInterfaces(testInterfaces); |
- if (m_webViewHost) |
- host->setDelegate(m_webViewHost.get()); |
- else |
- host->setDelegate(host); |
- host->setProxy(host); |
- WebView* view = WebView::create(host); |
- view->setPermissionClient(testInterfaces->testRunner()->webPermissions()); |
- view->setDevToolsAgentClient(devToolsAgent); |
- host->setWebWidget(view); |
- m_prefs.applyTo(view); |
- view->initializeMainFrame(host); |
- m_windowList.append(host); |
- host->loadURLForFrame(url, string()); |
- return host; |
-} |
- |
-void TestShell::closeWindow(WebViewHost* window) |
-{ |
- size_t i = m_windowList.find(window); |
- if (i == notFound) { |
- ASSERT_NOT_REACHED(); |
- return; |
- } |
- m_windowList.remove(i); |
- WebWidget* focusedWidget = m_focusedWidget; |
- if (window->webWidget() == m_focusedWidget) |
- focusedWidget = 0; |
- |
- window->shutdown(); |
- delete window; |
- // We set the focused widget after deleting the web view host because it |
- // can change the focus. |
- m_focusedWidget = focusedWidget; |
- if (m_focusedWidget) { |
- webView()->setIsActive(true); |
- m_focusedWidget->setFocus(true); |
- } |
-} |
- |
-void TestShell::closeRemainingWindows() |
-{ |
- // Just close devTools window manually because we have custom deinitialization code for it. |
- closeDevTools(); |
- |
- // Iterate through the window list and close everything except the main |
- // window. We don't want to delete elements as we're iterating, so we copy |
- // to a temp vector first. |
- Vector<WebViewHost*> windowsToDelete; |
- for (unsigned i = 0; i < m_windowList.size(); ++i) { |
- if (m_windowList[i] != webViewHost()) |
- windowsToDelete.append(m_windowList[i]); |
- } |
- ASSERT(windowsToDelete.size() + 1 == m_windowList.size()); |
- for (unsigned i = 0; i < windowsToDelete.size(); ++i) |
- closeWindow(windowsToDelete[i]); |
- ASSERT(m_windowList.size() == 1); |
-} |
- |
-int TestShell::windowCount() |
-{ |
- return m_windowList.size(); |
-} |
- |
-void TestShell::captureHistoryForWindow(size_t windowIndex, WebVector<WebHistoryItem>* history, size_t* currentEntryIndex) |
-{ |
- ASSERT(history); |
- ASSERT(currentEntryIndex); |
- if (windowIndex >= m_windowList.size()) |
- return; |
- TestNavigationController& navigationController = *m_windowList[windowIndex]->navigationController(); |
- size_t entryCount = navigationController.entryCount(); |
- WebVector<WebHistoryItem> result(entryCount); |
- *currentEntryIndex = navigationController.lastCommittedEntryIndex(); |
- for (size_t index = 0; index < entryCount; ++index) { |
- WebHistoryItem historyItem = navigationController.entryAtIndex(index)->contentState(); |
- if (historyItem.isNull()) { |
- historyItem.initialize(); |
- historyItem.setURLString(navigationController.entryAtIndex(index)->URL().spec().utf16()); |
- } |
- result[index] = historyItem; |
- } |
- history->swap(result); |
-} |