web_test_proxy.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/web_test_proxy.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <cctype> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/callback_helpers.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/debug/trace_event.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/logging.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/MockColorChooser.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/MockWebSpeechRecognizer.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/SpellCheckClient.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/TestCommon.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/TestInterfaces.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/TestPlugin.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/WebTestDelegate.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/WebTestInterfaces.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/WebUserMediaClientMock.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/accessibility_controller.h" 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/event_sender.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/test_runner.h" 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/web_test_runner.h" 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// FIXME: Including platform_canvas.h here is a layering violation. 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "skia/ext/platform_canvas.h" 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebCString.h" 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLError.h" 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h" 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLResponse.h" 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebAXEnums.h" 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebAXObject.h" 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCachedURLRequest.h" 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebConsoleMessage.h" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDataSource.h" 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDocument.h" 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebElement.h" 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebHistoryItem.h" 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebLocalFrame.h" 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebMIDIClientMock.h" 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNode.h" 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPluginParams.h" 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPrintParams.h" 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebRange.h" 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h" 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content { 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class HostMethodTask : public WebMethodTask<WebTestProxyBase> { 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef void (WebTestProxyBase::*CallbackMethodType)(); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) HostMethodTask(WebTestProxyBase* object, CallbackMethodType callback) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : WebMethodTask<WebTestProxyBase>(object), callback_(callback) {} 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void runIfValid() OVERRIDE { (m_object->*callback_)(); } 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CallbackMethodType callback_; 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void PrintFrameDescription(WebTestDelegate* delegate, blink::WebFrame* frame) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string name8 = frame->uniqueName().utf8(); 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (frame == frame->view()->mainFrame()) { 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!name8.length()) { 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate->printMessage("main frame"); 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate->printMessage(std::string("main frame \"") + name8 + "\""); 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!name8.length()) { 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate->printMessage("frame (anonymous)"); 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate->printMessage(std::string("frame \"") + name8 + "\""); 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void PrintFrameuserGestureStatus(WebTestDelegate* delegate, 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebFrame* frame, 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const char* msg) { 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_user_gesture = 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebUserGestureIndicator::isProcessingUserGesture(); 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate->printMessage(std::string("Frame with user gesture \"") + 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) (is_user_gesture ? "true" : "false") + "\"" + msg); 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Used to write a platform neutral file:/// URL by taking the 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// filename and its directory. (e.g., converts 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// "file:///tmp/foo/bar.txt" to just "bar.txt"). 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string DescriptionSuitableForTestResult(const std::string& url) { 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (url.empty() || std::string::npos == url.find("file://")) 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return url; 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t pos = url.rfind('/'); 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (pos == std::string::npos || !pos) 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "ERROR:" + url; 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pos = url.rfind('/', pos - 1); 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (pos == std::string::npos) 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "ERROR:" + url; 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return url.substr(pos + 1); 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void PrintResponseDescription(WebTestDelegate* delegate, 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLResponse& response) { 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (response.isNull()) { 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate->printMessage("(null)"); 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string url = response.url().spec(); 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) char data[100]; 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) snprintf(data, sizeof(data), "%d", response.httpStatusCode()); 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate->printMessage(std::string("<NSURLResponse ") + 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DescriptionSuitableForTestResult(url) + 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ", http status code " + data + ">"); 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string URLDescription(const GURL& url) { 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (url.SchemeIs("file")) 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return url.ExtractFileName(); 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return url.possibly_invalid_spec(); 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string PriorityDescription( 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLRequest::Priority& priority) { 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (priority) { 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebURLRequest::PriorityVeryLow: 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "VeryLow"; 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebURLRequest::PriorityLow: 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "Low"; 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebURLRequest::PriorityMedium: 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "Medium"; 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebURLRequest::PriorityHigh: 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "High"; 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebURLRequest::PriorityVeryHigh: 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "VeryHigh"; 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebURLRequest::PriorityUnresolved: 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default: 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "Unresolved"; 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void BlockRequest(blink::WebURLRequest& request) { 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request.setURL(GURL("255.255.255.255")); 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool IsLocalHost(const std::string& host) { 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return host == "127.0.0.1" || host == "localhost"; 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool HostIsUsedBySomeTestsToGenerateError(const std::string& host) { 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return host == "255.255.255.255"; 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Used to write a platform neutral file:/// URL by only taking the filename 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// (e.g., converts "file:///tmp/foo.txt" to just "foo.txt"). 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string URLSuitableForTestResult(const std::string& url) { 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (url.empty() || std::string::npos == url.find("file://")) 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return url; 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t pos = url.rfind('/'); 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (pos == std::string::npos) { 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifdef WIN32 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pos = url.rfind('\\'); 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (pos == std::string::npos) 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pos = 0; 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#else 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pos = 0; 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string filename = url.substr(pos + 1); 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (filename.empty()) 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "file:"; // A WebKit test has this in its expected output. 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return filename; 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// WebNavigationType debugging strings taken from PolicyDelegate.mm. 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* kLinkClickedString = "link clicked"; 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* kFormSubmittedString = "form submitted"; 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* kBackForwardString = "back/forward"; 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* kReloadString = "reload"; 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* kFormResubmittedString = "form resubmitted"; 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* kOtherString = "other"; 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* kIllegalString = "illegal value"; 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Get a debugging string from a WebNavigationType. 190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* WebNavigationTypeToString(blink::WebNavigationType type) { 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (type) { 192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebNavigationTypeLinkClicked: 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kLinkClickedString; 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebNavigationTypeFormSubmitted: 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kFormSubmittedString; 196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebNavigationTypeBackForward: 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kBackForwardString; 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebNavigationTypeReload: 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kReloadString; 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebNavigationTypeFormResubmitted: 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kFormResubmittedString; 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebNavigationTypeOther: 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kOtherString; 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return kIllegalString; 206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string DumpDocumentText(blink::WebFrame* frame) { 209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // We use the document element's text instead of the body text here because 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // not all documents have a body, such as XML documents. 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebElement document_element = frame->document().documentElement(); 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (document_element.isNull()) 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return std::string(); 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return document_element.innerText().utf8(); 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string DumpFramesAsText(blink::WebFrame* frame, bool recursive) { 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string result; 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Add header for all but the main frame. Skip empty frames. 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (frame->parent() && !frame->document().documentElement().isNull()) { 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append("\n--------\nFrame: '"); 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append(frame->uniqueName().utf8().data()); 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append("'\n--------\n"); 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append(DumpDocumentText(frame)); 228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append("\n"); 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (recursive) { 231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (blink::WebFrame* child = frame->firstChild(); child; 232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) child = child->nextSibling()) 233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append(DumpFramesAsText(child, recursive)); 234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return result; 237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string DumpFramesAsPrintedText(blink::WebFrame* frame, bool recursive) { 240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string result; 241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Cannot do printed format for anything other than HTML 243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!frame->document().isHTMLDocument()) 244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return std::string(); 245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Add header for all but the main frame. Skip empty frames. 247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (frame->parent() && !frame->document().documentElement().isNull()) { 248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append("\n--------\nFrame: '"); 249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append(frame->uniqueName().utf8().data()); 250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append("'\n--------\n"); 251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append( 254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) frame->renderTreeAsText(blink::WebFrame::RenderAsTextPrinting).utf8()); 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append("\n"); 256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (recursive) { 258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (blink::WebFrame* child = frame->firstChild(); child; 259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) child = child->nextSibling()) 260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append(DumpFramesAsPrintedText(child, recursive)); 261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return result; 264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string DumpFrameScrollPosition(blink::WebFrame* frame, bool recursive) { 267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string result; 268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebSize offset = frame->scrollOffset(); 269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (offset.width > 0 || offset.height > 0) { 270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (frame->parent()) { 271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result = 272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string("frame '") + frame->uniqueName().utf8().data() + "' "; 273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) char data[100]; 275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) snprintf( 276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data, sizeof(data), "scrolled to %d,%d\n", offset.width, offset.height); 277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result += data; 278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!recursive) 281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return result; 282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (blink::WebFrame* child = frame->firstChild(); child; 283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) child = child->nextSibling()) 284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result += DumpFrameScrollPosition(child, recursive); 285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return result; 286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string DumpAllBackForwardLists(TestInterfaces* interfaces, 289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebTestDelegate* delegate) { 290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string result; 291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<WebTestProxyBase*>& window_list = interfaces->windowList(); 292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t i = 0; i < window_list.size(); ++i) 293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result.append(delegate->dumpHistoryForWindow(window_list.at(i))); 294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return result; 295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)WebTestProxyBase::WebTestProxyBase() 299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : test_interfaces_(NULL), 300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_(NULL), 301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_widget_(NULL), 302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) spellcheck_(new SpellCheckClient(this)), 303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chooser_count_(0) { 304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Reset(); 305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)WebTestProxyBase::~WebTestProxyBase() { 308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->windowClosed(this); 309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::SetInterfaces(WebTestInterfaces* interfaces) { 312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_ = interfaces->testInterfaces(); 313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->windowOpened(this); 314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::SetDelegate(WebTestDelegate* delegate) { 317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_ = delegate; 318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) spellcheck_->setDelegate(delegate); 319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (speech_recognizer_.get()) 320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) speech_recognizer_->setDelegate(delegate); 321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebView* WebTestProxyBase::GetWebView() const { 324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(web_widget_); 325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TestRunner does not support popup widgets. So |web_widget|_ is always a 326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // WebView. 327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return static_cast<blink::WebView*>(web_widget_); 328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::Reset() { 331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) animate_scheduled_ = false; 332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_.clear(); 333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) log_console_output_ = true; 334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (midi_client_.get()) 335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) midi_client_->resetMock(); 336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accept_languages_ = ""; 337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebSpellCheckClient* WebTestProxyBase::GetSpellCheckClient() const { 340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return spellcheck_.get(); 341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebColorChooser* WebTestProxyBase::CreateColorChooser( 344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebColorChooserClient* client, 345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebColor& color, 346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebVector<blink::WebColorSuggestion>& suggestions) { 347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This instance is deleted by WebCore::ColorInputType 348cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return new MockColorChooser(client, delegate_, this); 349cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 350cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebTestProxyBase::RunFileChooser( 352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebFileChooserParams& params, 353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebFileChooserCompletion* completion) { 354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("Mock: Opening a file chooser.\n"); 355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // FIXME: Add ability to set file names to a file upload control. 356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::ShowValidationMessage( 360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebRect& anchor_in_root_view, 361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebString& message, 362cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebString& sub_message, 363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebTextDirection hint) { 364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string("ValidationMessageClient: main-message=") + 366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string(message.utf8()) + " sub-message=" + 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string(sub_message.utf8()) + "\n"); 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string WebTestProxyBase::CaptureTree(bool debug_render_tree) { 371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool should_dump_custom_text = 372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->shouldDumpAsCustomText(); 373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool should_dump_as_text = test_interfaces_->testRunner()->shouldDumpAsText(); 374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool should_dump_as_markup = 375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->shouldDumpAsMarkup(); 376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool should_dump_as_printed = test_interfaces_->testRunner()->isPrinting(); 377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebFrame* frame = GetWebView()->mainFrame(); 378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string data_utf8; 379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (should_dump_custom_text) { 380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Append a newline for the test driver. 381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data_utf8 = test_interfaces_->testRunner()->customDumpText() + "\n"; 382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (should_dump_as_text) { 383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool recursive = 384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->shouldDumpChildFramesAsText(); 385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data_utf8 = should_dump_as_printed 386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ? DumpFramesAsPrintedText(frame, recursive) 387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : DumpFramesAsText(frame, recursive); 388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (should_dump_as_markup) { 389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Append a newline for the test driver. 390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data_utf8 = frame->contentAsMarkup().utf8() + "\n"; 391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool recursive = 393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->shouldDumpChildFrameScrollPositions(); 394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebFrame::RenderAsTextControls render_text_behavior = 395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebFrame::RenderAsTextNormal; 396cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (should_dump_as_printed) 397cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_text_behavior |= blink::WebFrame::RenderAsTextPrinting; 398cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (debug_render_tree) 399cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_text_behavior |= blink::WebFrame::RenderAsTextDebug; 400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data_utf8 = frame->renderTreeAsText(render_text_behavior).utf8(); 401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data_utf8 += DumpFrameScrollPosition(frame, recursive); 402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 403cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->ShouldDumpBackForwardList()) 405cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data_utf8 += DumpAllBackForwardLists(test_interfaces_, delegate_); 406cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return data_utf8; 408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 410cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DrawSelectionRect(SkCanvas* canvas) { 411cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // See if we need to draw the selection bounds rect. Selection bounds 412cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // rect is the rect enclosing the (possibly transformed) selection. 413cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The rect should be drawn after everything is laid out and painted. 414cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!test_interfaces_->testRunner()->shouldDumpSelectionRect()) 415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 416cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If there is a selection rect - draw a red 1px border enclosing rect 417cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebRect wr = GetWebView()->mainFrame()->selectionBoundsRect(); 418cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (wr.isEmpty()) 419cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 420cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Render a red rectangle bounding selection rect 421cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SkPaint paint; 422cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) paint.setColor(0xFFFF0000); // Fully opaque red 423cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) paint.setStyle(SkPaint::kStroke_Style); 424cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) paint.setFlags(SkPaint::kAntiAlias_Flag); 425cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) paint.setStrokeWidth(1.0f); 426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SkIRect rect; // Bounding rect 427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) rect.set(wr.x, wr.y, wr.x + wr.width, wr.y + wr.height); 428cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) canvas->drawIRect(rect, paint); 429cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 431cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) { 432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TRACE_EVENT2("shell", 433cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "WebTestProxyBase::didCompositeAndReadback", 434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "x", 435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bitmap.info().fWidth, 436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "y", 437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bitmap.info().fHeight); 438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SkCanvas canvas(bitmap); 439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DrawSelectionRect(&canvas); 440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(!composite_and_readback_callbacks_.empty()); 441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) composite_and_readback_callbacks_.front().Run(bitmap); 442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) composite_and_readback_callbacks_.pop_front(); 443cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 445cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::SetAcceptLanguages(const std::string& accept_languages) { 446cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool notify = accept_languages_ != accept_languages; 447cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accept_languages_ = accept_languages; 448cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (notify) 450cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetWebView()->acceptLanguagesChanged(); 451cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::CapturePixelsForPrinting( 454cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Callback<void(const SkBitmap&)>& callback) { 455cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_widget_->layout(); 456cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 457cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebSize page_size_in_pixels = web_widget_->size(); 458cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebFrame* web_frame = GetWebView()->mainFrame(); 459cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 460cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int page_count = web_frame->printBegin(page_size_in_pixels); 461cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int totalHeight = page_count * (page_size_in_pixels.height + 1) - 1; 462cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 463cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_opaque = false; 464cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) skia::RefPtr<SkCanvas> canvas(skia::AdoptRef(skia::TryCreateBitmapCanvas( 465cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) page_size_in_pixels.width, totalHeight, is_opaque))); 466cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (canvas) 467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_frame->printPagesWithBoundaries(canvas.get(), page_size_in_pixels); 468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_frame->printEnd(); 469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 470cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DrawSelectionRect(canvas.get()); 471cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SkBaseDevice* device = skia::GetTopDevice(*canvas); 472cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const SkBitmap& bitmap = device->accessBitmap(false); 473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(bitmap); 474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 476cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::CapturePixelsAsync( 477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Callback<void(const SkBitmap&)>& callback) { 478cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync"); 479cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 480cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(web_widget_->isAcceleratedCompositingActive()); 481cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(!callback.is_null()); 482cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 483cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->isPrinting()) { 484cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopProxy::current()->PostTask( 485cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_HERE, 486cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind(&WebTestProxyBase::CapturePixelsForPrinting, 487cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Unretained(this), 488cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback)); 489cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 490cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 491cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) composite_and_readback_callbacks_.push_back(callback); 493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_widget_->compositeAndReadbackAsync(this); 494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 495cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::SetLogConsoleOutput(bool enabled) { 497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) log_console_output_ = enabled; 498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidDisplayAsync(const base::Closure& callback, 501cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const SkBitmap& bitmap) { 502cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Verify we actually composited. 503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHECK_NE(0, bitmap.info().fWidth); 504cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHECK_NE(0, bitmap.info().fHeight); 505cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!callback.is_null()) 506cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(); 507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DisplayAsyncThen(const base::Closure& callback) { 510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TRACE_EVENT0("shell", "WebTestProxyBase::DisplayAsyncThen"); 511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHECK(web_widget_->isAcceleratedCompositingActive()); 513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CapturePixelsAsync(base::Bind( 514cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback)); 515cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 516cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 517cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebMIDIClientMock* WebTestProxyBase::GetMIDIClientMock() { 518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!midi_client_.get()) 519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) midi_client_.reset(new blink::WebMIDIClientMock); 520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return midi_client_.get(); 521cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)MockWebSpeechRecognizer* WebTestProxyBase::GetSpeechRecognizerMock() { 524cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!speech_recognizer_.get()) { 525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) speech_recognizer_.reset(new MockWebSpeechRecognizer()); 526cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) speech_recognizer_->setDelegate(delegate_); 527cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 528cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return speech_recognizer_.get(); 529cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 531cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::ScheduleAnimation() { 532cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!test_interfaces_->testRunner()->TestIsRunning()) 533cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 534cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 535cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!animate_scheduled_) { 536cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) animate_scheduled_ = true; 537cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->postDelayedTask( 538cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new HostMethodTask(this, &WebTestProxyBase::AnimateNow), 1); 539cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 542cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::AnimateNow() { 543cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (animate_scheduled_) { 544cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) animate_scheduled_ = false; 545cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_widget_->animate(0.0); 546cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_widget_->layout(); 547cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 548cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 549cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::PostAccessibilityEvent(const blink::WebAXObject& obj, 551cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebAXEvent event) { 552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Only hook the accessibility events occured during the test run. 553cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This check prevents false positives in WebLeakDetector. 554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The pending tasks in browser/renderer message queue may trigger 555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // accessibility events, 556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // and AccessibilityController will hold on to their target nodes if we don't 557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // ignore them here. 558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!test_interfaces_->testRunner()->TestIsRunning()) 559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 560cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (event == blink::WebAXEventFocus) 562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->accessibilityController()->SetFocusedElement(obj); 563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 564cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const char* event_name = NULL; 565cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (event) { 566cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventActiveDescendantChanged: 567cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "ActiveDescendantChanged"; 568cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 569cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventAlert: 570cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "Alert"; 571cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 572cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventAriaAttributeChanged: 573cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "AriaAttributeChanged"; 574cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 575cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventAutocorrectionOccured: 576cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "AutocorrectionOccured"; 577cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 578cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventBlur: 579cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "Blur"; 580cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 581cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventCheckedStateChanged: 582cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "CheckedStateChanged"; 583cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 584cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventChildrenChanged: 585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "ChildrenChanged"; 586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventFocus: 588cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "Focus"; 589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventHide: 591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "Hide"; 592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 593cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventInvalidStatusChanged: 594cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "InvalidStatusChanged"; 595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 596cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventLayoutComplete: 597cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "LayoutComplete"; 598cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 599cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventLiveRegionChanged: 600cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "LiveRegionChanged"; 601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventLoadComplete: 603cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "LoadComplete"; 604cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 605cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventLocationChanged: 606cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "LocationChanged"; 607cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 608cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventMenuListItemSelected: 609cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "MenuListItemSelected"; 610cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventMenuListValueChanged: 612cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "MenuListValueChanged"; 613cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 614cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventRowCollapsed: 615cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "RowCollapsed"; 616cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 617cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventRowCountChanged: 618cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "RowCountChanged"; 619cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 620cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventRowExpanded: 621cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "RowExpanded"; 622cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 623cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventScrollPositionChanged: 624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "ScrollPositionChanged"; 625cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 626cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventScrolledToAnchor: 627cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "ScrolledToAnchor"; 628cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 629cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventSelectedChildrenChanged: 630cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "SelectedChildrenChanged"; 631cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventSelectedTextChanged: 633cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "SelectedTextChanged"; 634cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 635cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventShow: 636cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "Show"; 637cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 638cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventTextChanged: 639cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "TextChanged"; 640cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 641cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventTextInserted: 642cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "TextInserted"; 643cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 644cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventTextRemoved: 645cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "TextRemoved"; 646cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 647cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebAXEventValueChanged: 648cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "ValueChanged"; 649cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 650cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default: 651cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name = "Unknown"; 652cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 653cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 654cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 655cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->accessibilityController()->NotificationReceived(obj, 656cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name); 657cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 658cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->accessibilityController() 659cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ->ShouldLogAccessibilityEvents()) { 660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string message("AccessibilityNotification - "); 661cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message += event_name; 662cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 663cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebNode node = obj.node(); 664cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!node.isNull() && node.isElementNode()) { 665cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebElement element = node.to<blink::WebElement>(); 666cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (element.hasAttribute("id")) { 667cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message += " - id:"; 668cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message += element.getAttribute("id").utf8().data(); 669cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 670cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 671cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 672cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(message + "\n"); 673cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 674cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 675cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 676cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::StartDragging(blink::WebLocalFrame* frame, 677cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebDragData& data, 678cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebDragOperationsMask mask, 679cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebImage& image, 680cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebPoint& point) { 681cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // When running a test, we need to fake a drag drop operation otherwise 682cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Windows waits for real mouse events to know when the drag is over. 683cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->eventSender()->DoDragDrop(data, mask); 684cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 685cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 686cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// The output from these methods in layout test mode should match that 687cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// expected by the layout tests. See EditingDelegate.m in DumpRenderTree. 688cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 689cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidChangeSelection(bool is_empty_callback) { 690cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpEditingCallbacks()) 691cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 692cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "EDITING DELEGATE: " 693cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "webViewDidChangeSelection:WebViewDidChangeSelectionNotification\n"); 694cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 695cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 696cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidChangeContents() { 697cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpEditingCallbacks()) 698cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 699cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification\n"); 700cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 701cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 702cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebTestProxyBase::CreateView(blink::WebLocalFrame* frame, 703cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLRequest& request, 704cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebWindowFeatures& features, 705cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebString& frame_name, 706cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebNavigationPolicy policy, 707cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool suppress_opener) { 708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!test_interfaces_->testRunner()->canOpenWindows()) 709cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 710cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpCreateView()) 711cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("createView(") + 712cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLDescription(request.url()) + ")\n"); 713cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 714cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 715cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 716cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebPlugin* WebTestProxyBase::CreatePlugin( 717cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 718cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebPluginParams& params) { 719cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (TestPlugin::isSupportedMimeType(params.mimeType)) 720cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return TestPlugin::create(frame, params, delegate_); 721cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return 0; 722cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 723cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 724cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::SetStatusText(const blink::WebString& text) { 725cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!test_interfaces_->testRunner()->shouldDumpStatusCallbacks()) 726cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 727cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 728cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string("UI DELEGATE STATUS CALLBACK: setStatusText:") + 729cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) text.utf8().data() + "\n"); 730cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 731cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 732cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidStopLoading() { 733cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpProgressFinishedCallback()) 734cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("postProgressFinishedNotification\n"); 735cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 736cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 737cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::ShowContextMenu( 738cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 739cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebContextMenuData& context_menu_data) { 740cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->eventSender()->SetContextMenuData(context_menu_data); 741cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 742cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 743cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebUserMediaClient* WebTestProxyBase::GetUserMediaClient() { 744cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!user_media_client_.get()) 745cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_media_client_.reset(new WebUserMediaClientMock(delegate_)); 746cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return user_media_client_.get(); 747cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 748cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 749cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Simulate a print by going into print mode and then exit straight away. 750cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::PrintPage(blink::WebLocalFrame* frame) { 751cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebSize page_size_in_pixels = web_widget_->size(); 752cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (page_size_in_pixels.isEmpty()) 753cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 754cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebPrintParams printParams(page_size_in_pixels); 755cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) frame->printBegin(printParams); 756cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) frame->printEnd(); 757cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 758cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 759cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebNotificationPresenter* WebTestProxyBase::GetNotificationPresenter() { 760cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return test_interfaces_->testRunner()->notification_presenter(); 761cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 762cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 763cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebMIDIClient* WebTestProxyBase::GetWebMIDIClient() { 764cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return GetMIDIClientMock(); 765cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 766cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 767cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebSpeechRecognizer* WebTestProxyBase::GetSpeechRecognizer() { 768cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return GetSpeechRecognizerMock(); 769cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 770cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 771cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebTestProxyBase::RequestPointerLock() { 772cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return test_interfaces_->testRunner()->RequestPointerLock(); 773cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 774cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 775cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::RequestPointerUnlock() { 776cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->RequestPointerUnlock(); 777cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 778cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 779cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebTestProxyBase::IsPointerLocked() { 780cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return test_interfaces_->testRunner()->isPointerLocked(); 781cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 782cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 783cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidFocus() { 784cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->setFocus(this, true); 785cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 786cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 787cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidBlur() { 788cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->setFocus(this, false); 789cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 790cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 791cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::SetToolTipText(const blink::WebString& text, 792cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebTextDirection direction) { 793cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->setToolTipText(text); 794cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 795cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 796cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidOpenChooser() { 797cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chooser_count_++; 798cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 799cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 800cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidCloseChooser() { 801cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chooser_count_--; 802cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 803cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 804cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebTestProxyBase::IsChooserShown() { 805cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return 0 < chooser_count_; 806cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 807cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 808cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::LoadURLExternally( 809cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 810cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLRequest& request, 811cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebNavigationPolicy policy, 812cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebString& suggested_name) { 813cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldWaitUntilExternalURLLoad()) { 814cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (policy == blink::WebNavigationPolicyDownload) { 815cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 816cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string("Downloading URL with suggested filename \"") + 817cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) suggested_name.utf8() + "\"\n"); 818cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 819cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("Loading URL externally - \"") + 820cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLDescription(request.url()) + "\"\n"); 821cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 822cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->testFinished(); 823cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 824cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 825cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 826cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidStartProvisionalLoad(blink::WebLocalFrame* frame) { 827cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!test_interfaces_->testRunner()->topLoadingFrame()) 828cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->setTopLoadingFrame(frame, false); 829cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 830cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 831cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 832cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didStartProvisionalLoadForFrame\n"); 833cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 834cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 835cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner() 836cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ->shouldDumpUserGestureInFrameLoadCallbacks()) { 837cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameuserGestureStatus( 838cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_, frame, " - in didStartProvisionalLoadForFrame\n"); 839cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 840cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 841cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 842cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidReceiveServerRedirectForProvisionalLoad( 843cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame) { 844cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 845cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 846cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 847cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " - didReceiveServerRedirectForProvisionalLoadForFrame\n"); 848cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 849cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 850cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 851cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebTestProxyBase::DidFailProvisionalLoad(blink::WebLocalFrame* frame, 852cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLError& error) { 853cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 854cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 855cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didFailProvisionalLoadWithError\n"); 856cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 857cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LocationChangeDone(frame); 858cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return !frame->provisionalDataSource(); 859cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 860cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 861cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidCommitProvisionalLoad( 862cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 863cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebHistoryItem& history_item, 864cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebHistoryCommitType history_type) { 865cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 866cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 867cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didCommitLoadForFrame\n"); 868cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 869cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 870cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 871cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidReceiveTitle(blink::WebLocalFrame* frame, 872cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebString& title, 873cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebTextDirection direction) { 874cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebCString title8 = title.utf8(); 875cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 876cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 877cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 878cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string(" - didReceiveTitle: ") + 879cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) title8.data() + "\n"); 880cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 881cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 882cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpTitleChanges()) 883cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("TITLE CHANGED: '") + title8.data() + 884cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "'\n"); 885cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 886cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 887cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidChangeIcon(blink::WebLocalFrame* frame, 888cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebIconURL::Type icon_type) { 889cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpIconChanges()) { 890cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 891cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string(" - didChangeIcons\n")); 892cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 893cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 894cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 895cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidFinishDocumentLoad(blink::WebLocalFrame* frame) { 896cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 897cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 898cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didFinishDocumentLoadForFrame\n"); 899cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 900cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unsigned pendingUnloadEvents = frame->unloadListenerCount(); 901cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (pendingUnloadEvents) { 902cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 903cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) char buffer[100]; 904cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) snprintf(buffer, 905cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) sizeof(buffer), 906cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " - has %u onunload handler(s)\n", 907cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pendingUnloadEvents); 908cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(buffer); 909cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 910cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 911cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 912cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 913cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidHandleOnloadEvents(blink::WebLocalFrame* frame) { 914cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 915cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 916cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didHandleOnloadEventsForFrame\n"); 917cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 918cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 919cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 920cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidFailLoad(blink::WebLocalFrame* frame, 921cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLError& error) { 922cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 923cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 924cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didFailLoadWithError\n"); 925cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 926cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LocationChangeDone(frame); 927cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 928cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 929cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidFinishLoad(blink::WebLocalFrame* frame) { 930cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) { 931cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 932cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didFinishLoadForFrame\n"); 933cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 934cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LocationChangeDone(frame); 935cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 936cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 937cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidDetectXSS(blink::WebLocalFrame* frame, 938cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURL& insecure_url, 939cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool did_block_entire_page) { 940cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) 941cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("didDetectXSS\n"); 942cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 943cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 944cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidDispatchPingLoader(blink::WebLocalFrame* frame, 945cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURL& url) { 946cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpPingLoaderCallbacks()) 947cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("PingLoader dispatched to '") + 948cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLDescription(url).c_str() + "'.\n"); 949cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 950cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 951cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::WillRequestResource( 952cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 953cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebCachedURLRequest& request) { 954cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpResourceRequestCallbacks()) { 955cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintFrameDescription(delegate_, frame); 956cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string(" - ") + 957cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request.initiatorName().utf8().data()); 958cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string(" requested '") + 959cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLDescription(request.urlRequest().url()).c_str() + 960cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "'\n"); 961cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 962cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 963cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 964cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::WillSendRequest( 965cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 966cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unsigned identifier, 967cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebURLRequest& request, 968cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLResponse& redirect_response) { 969cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Need to use GURL for host() and SchemeIs() 970cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL url = request.url(); 971cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string request_url = url.possibly_invalid_spec(); 972cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 973cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL main_document_url = request.firstPartyForCookies(); 974cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 975cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (redirect_response.isNull() && 976cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks() || 977cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->shouldDumpResourcePriorities())) { 978cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(resource_identifier_map_.find(identifier) == 979cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_.end()); 980cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_[identifier] = 981cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DescriptionSuitableForTestResult(request_url); 982cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 983cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 984cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks()) { 985cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (resource_identifier_map_.find(identifier) == 986cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_.end()) 987cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("<unknown>"); 988cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 989cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(resource_identifier_map_[identifier]); 990cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - willSendRequest <NSURLRequest URL "); 991cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 992cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DescriptionSuitableForTestResult(request_url).c_str()); 993cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(", main document URL "); 994cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(URLDescription(main_document_url).c_str()); 995cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(", http method "); 996cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(request.httpMethod().utf8().data()); 997cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("> redirectResponse "); 998cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintResponseDescription(delegate_, redirect_response); 999cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("\n"); 1000cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1001cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1002cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpResourcePriorities()) { 1003cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage( 1004cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DescriptionSuitableForTestResult(request_url).c_str()); 1005cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" has priority "); 1006cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(PriorityDescription(request.priority())); 1007cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("\n"); 1008cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1009cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1010cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->httpHeadersToClear()) { 1011cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::set<std::string>* clearHeaders = 1012cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->httpHeadersToClear(); 1013cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (std::set<std::string>::const_iterator header = clearHeaders->begin(); 1014cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) header != clearHeaders->end(); 1015cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ++header) 1016cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request.clearHTTPHeaderField(blink::WebString::fromUTF8(*header)); 1017cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1018cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1019cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string host = url.host(); 1020cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!host.empty() && (url.SchemeIs("http") || url.SchemeIs("https"))) { 1021cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!IsLocalHost(host) && !HostIsUsedBySomeTestsToGenerateError(host) && 1022cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ((!main_document_url.SchemeIs("http") && 1023cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) !main_document_url.SchemeIs("https")) || 1024cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IsLocalHost(main_document_url.host())) && 1025cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) !delegate_->allowExternalPages()) { 1026cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("Blocked access to external URL ") + 1027cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_url + "\n"); 1028cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BlockRequest(request); 1029cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 1030cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1031cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1032cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1033cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Set the new substituted URL. 1034cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request.setURL(delegate_->rewriteLayoutTestsURL(request.url().spec())); 1035cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1036cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1037cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidReceiveResponse( 1038cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 1039cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unsigned identifier, 1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLResponse& response) { 1041cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks()) { 1042cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (resource_identifier_map_.find(identifier) == 1043cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_.end()) 1044cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("<unknown>"); 1045cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 1046cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(resource_identifier_map_[identifier]); 1047cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didReceiveResponse "); 1048cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrintResponseDescription(delegate_, response); 1049cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("\n"); 1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1051cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpResourceResponseMIMETypes()) { 1052cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL url = response.url(); 1053cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebString mime_type = response.mimeType(); 1054cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(url.ExtractFileName()); 1055cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" has MIME type "); 1056cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Simulate NSURLResponse's mapping of empty/unknown MIME types to 1057cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // application/octet-stream 1058cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(mime_type.isEmpty() ? "application/octet-stream" 1059cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : mime_type.utf8().data()); 1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("\n"); 1061cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1062cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1063cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1064cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidChangeResourcePriority( 1065cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 1066cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unsigned identifier, 1067cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLRequest::Priority& priority, 1068cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int intra_priority_value) { 1069cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpResourcePriorities()) { 1070cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (resource_identifier_map_.find(identifier) == 1071cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_.end()) 1072cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("<unknown>"); 1073cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 1074cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(resource_identifier_map_[identifier]); 1075cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" changed priority to "); 1076cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(PriorityDescription(priority)); 1077cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) char buffer[64]; 1078cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) snprintf( 1079cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) buffer, sizeof(buffer), ", intra_priority %d", intra_priority_value); 1080cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(buffer); 1081cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("\n"); 1082cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1083cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1084cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1085cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidFinishResourceLoad(blink::WebLocalFrame* frame, 1086cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unsigned identifier) { 1087cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks()) { 1088cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (resource_identifier_map_.find(identifier) == 1089cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_.end()) 1090cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("<unknown>"); 1091cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 1092cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(resource_identifier_map_[identifier]); 1093cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(" - didFinishLoading\n"); 1094cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1095cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_identifier_map_.erase(identifier); 1096cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1097cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1098cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::DidAddMessageToConsole( 1099cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebConsoleMessage& message, 1100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebString& source_name, 1101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unsigned source_line) { 1102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This matches win DumpRenderTree's UIDelegate.cpp. 1103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!log_console_output_) 1104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 1105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string level; 1106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (message.level) { 1107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebConsoleMessage::LevelDebug: 1108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) level = "DEBUG"; 1109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebConsoleMessage::LevelLog: 1111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) level = "MESSAGE"; 1112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebConsoleMessage::LevelInfo: 1114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) level = "INFO"; 1115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebConsoleMessage::LevelWarning: 1117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) level = "WARNING"; 1118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case blink::WebConsoleMessage::LevelError: 1120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) level = "ERROR"; 1121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("CONSOLE ") + level + ": "); 1124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (source_line) { 1125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) char buffer[40]; 1126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) snprintf(buffer, sizeof(buffer), "line %d: ", source_line); 1127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(buffer); 1128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!message.text.isEmpty()) { 1130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string new_message; 1131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new_message = message.text.utf8(); 1132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t file_protocol = new_message.find("file://"); 1133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (file_protocol != std::string::npos) { 1134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new_message = new_message.substr(0, file_protocol) + 1135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLSuitableForTestResult(new_message.substr(file_protocol)); 1136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(new_message); 1138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("\n")); 1140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::LocationChangeDone(blink::WebFrame* frame) { 1143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (frame != test_interfaces_->testRunner()->topLoadingFrame()) 1144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 1145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->setTopLoadingFrame(frame, true); 1146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebNavigationPolicy WebTestProxyBase::DecidePolicyForNavigation( 1149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame, 1150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebDataSource::ExtraData* data, 1151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebURLRequest& request, 1152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebNavigationType type, 1153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebNavigationPolicy default_policy, 1154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_redirect) { 1155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebNavigationPolicy result; 1156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!test_interfaces_->testRunner()->policyDelegateEnabled()) 1157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return default_policy; 1158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("Policy delegate: attempt to load ") + 1160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLDescription(request.url()) + 1161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " with navigation type '" + 1162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebNavigationTypeToString(type) + "'\n"); 1163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->policyDelegateIsPermissive()) 1164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result = blink::WebNavigationPolicyCurrentTab; 1165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 1166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) result = blink::WebNavigationPolicyIgnore; 1167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->policyDelegateShouldNotifyDone()) 1169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_interfaces_->testRunner()->policyDelegateDone(); 1170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return result; 1171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebTestProxyBase::WillCheckAndDispatchMessageEvent( 1174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* source_frame, 1175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebFrame* target_frame, 1176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebSecurityOrigin target, 1177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebDOMMessageEvent event) { 1178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldInterceptPostMessage()) { 1179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage("intercepted postMessage\n"); 1180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 1181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 1184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::PostSpellCheckEvent(const blink::WebString& event_name) { 1187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_interfaces_->testRunner()->shouldDumpSpellCheckCallbacks()) { 1188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->printMessage(std::string("SpellCheckEvent: ") + 1189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_name.utf8().data() + "\n"); 1190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebTestProxyBase::ResetInputMethod() { 1194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If a composition text exists, then we need to let the browser process 1195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // to cancel the input method's ongoing composition session. 1196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (web_widget_) 1197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_widget_->confirmComposition(); 1198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)blink::WebString WebTestProxyBase::acceptLanguages() { 1201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return blink::WebString::fromUTF8(accept_languages_); 1202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace content 1205