OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/shell/renderer/test_runner/WebTestProxy.h" | 5 #include "content/shell/renderer/test_runner/WebTestProxy.h" |
6 | 6 |
7 #include <cctype> | 7 #include <cctype> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "content/shell/renderer/test_runner/event_sender.h" | 10 #include "content/shell/renderer/test_runner/event_sender.h" |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 result += data; | 297 result += data; |
298 } | 298 } |
299 | 299 |
300 if (!recursive) | 300 if (!recursive) |
301 return result; | 301 return result; |
302 for (WebFrame* child = frame->firstChild(); child; child = child->nextSiblin
g()) | 302 for (WebFrame* child = frame->firstChild(); child; child = child->nextSiblin
g()) |
303 result += dumpFrameScrollPosition(child, recursive); | 303 result += dumpFrameScrollPosition(child, recursive); |
304 return result; | 304 return result; |
305 } | 305 } |
306 | 306 |
307 struct ToLower { | |
308 base::char16 operator()(base::char16 c) { return tolower(c); } | |
309 }; | |
310 | |
311 // Returns True if item1 < item2. | |
312 bool HistoryItemCompareLess(const WebHistoryItem& item1, const WebHistoryItem& i
tem2) | |
313 { | |
314 base::string16 target1 = item1.target(); | |
315 base::string16 target2 = item2.target(); | |
316 std::transform(target1.begin(), target1.end(), target1.begin(), ToLower()); | |
317 std::transform(target2.begin(), target2.end(), target2.begin(), ToLower()); | |
318 return target1 < target2; | |
319 } | |
320 | |
321 string dumpHistoryItem(const WebHistoryItem& item, int indent, bool isCurrent) | |
322 { | |
323 string result; | |
324 | |
325 if (isCurrent) { | |
326 result.append("curr->"); | |
327 result.append(indent - 6, ' '); // 6 == "curr->".length() | |
328 } else | |
329 result.append(indent, ' '); | |
330 | |
331 string url = normalizeLayoutTestURL(item.urlString().utf8()); | |
332 result.append(url); | |
333 if (!item.target().isEmpty()) { | |
334 result.append(" (in frame \""); | |
335 result.append(item.target().utf8()); | |
336 result.append("\")"); | |
337 } | |
338 result.append("\n"); | |
339 | |
340 const WebVector<WebHistoryItem>& children = item.children(); | |
341 if (!children.isEmpty()) { | |
342 // Must sort to eliminate arbitrary result ordering which defeats | |
343 // reproducible testing. | |
344 // FIXME: WebVector should probably just be a std::vector!! | |
345 std::vector<WebHistoryItem> sortedChildren; | |
346 for (size_t i = 0; i < children.size(); ++i) | |
347 sortedChildren.push_back(children[i]); | |
348 std::sort(sortedChildren.begin(), sortedChildren.end(), HistoryItemCompa
reLess); | |
349 for (size_t i = 0; i < sortedChildren.size(); ++i) | |
350 result += dumpHistoryItem(sortedChildren[i], indent + 4, false); | |
351 } | |
352 | |
353 return result; | |
354 } | |
355 | |
356 void dumpBackForwardList(const WebVector<WebHistoryItem>& history, size_t curren
tEntryIndex, string& result) | |
357 { | |
358 result.append("\n============== Back Forward List ==============\n"); | |
359 for (size_t index = 0; index < history.size(); ++index) | |
360 result.append(dumpHistoryItem(history[index], 8, index == currentEntryIn
dex)); | |
361 result.append("===============================================\n"); | |
362 } | |
363 | |
364 string dumpAllBackForwardLists(TestInterfaces* interfaces, WebTestDelegate* dele
gate) | 307 string dumpAllBackForwardLists(TestInterfaces* interfaces, WebTestDelegate* dele
gate) |
365 { | 308 { |
366 string result; | 309 string result; |
367 const vector<WebTestProxyBase*>& windowList = interfaces->windowList(); | 310 const vector<WebTestProxyBase*>& windowList = interfaces->windowList(); |
368 for (unsigned i = 0; i < windowList.size(); ++i) { | 311 for (unsigned i = 0; i < windowList.size(); ++i) |
369 size_t currentEntryIndex = 0; | 312 result.append(delegate->dumpHistoryForWindow(windowList.at(i))); |
370 WebVector<WebHistoryItem> history; | |
371 delegate->captureHistoryForWindow(windowList.at(i), &history, ¤tEn
tryIndex); | |
372 dumpBackForwardList(history, currentEntryIndex, result); | |
373 } | |
374 return result; | 313 return result; |
375 } | 314 } |
376 | 315 |
377 } | 316 } |
378 | 317 |
379 WebTestProxyBase::WebTestProxyBase() | 318 WebTestProxyBase::WebTestProxyBase() |
380 : m_testInterfaces(0) | 319 : m_testInterfaces(0) |
381 , m_delegate(0) | 320 , m_delegate(0) |
382 , m_webWidget(0) | 321 , m_webWidget(0) |
383 , m_spellcheck(new SpellCheckClient(this)) | 322 , m_spellcheck(new SpellCheckClient(this)) |
(...skipping 968 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1352 | 1291 |
1353 void WebTestProxyBase::resetInputMethod() | 1292 void WebTestProxyBase::resetInputMethod() |
1354 { | 1293 { |
1355 // If a composition text exists, then we need to let the browser process | 1294 // If a composition text exists, then we need to let the browser process |
1356 // to cancel the input method's ongoing composition session. | 1295 // to cancel the input method's ongoing composition session. |
1357 if (m_webWidget) | 1296 if (m_webWidget) |
1358 m_webWidget->confirmComposition(); | 1297 m_webWidget->confirmComposition(); |
1359 } | 1298 } |
1360 | 1299 |
1361 } // namespace content | 1300 } // namespace content |
OLD | NEW |