| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <set> | 5 #include <set> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 static_cast<BrowserAccessibilityManagerAndroid*>(node->manager()); | 84 static_cast<BrowserAccessibilityManagerAndroid*>(node->manager()); |
| 85 base::string16 text = android_node->GetText(); | 85 base::string16 text = android_node->GetText(); |
| 86 base::string16 concatenated; | 86 base::string16 concatenated; |
| 87 int previous_end_index = -1; | 87 int previous_end_index = -1; |
| 88 while (manager->NextAtGranularity( | 88 while (manager->NextAtGranularity( |
| 89 granularity, end_index, android_node, | 89 granularity, end_index, android_node, |
| 90 &start_index, &end_index)) { | 90 &start_index, &end_index)) { |
| 91 int len = (granularity == GRANULARITY_CHARACTER) ? | 91 int len = (granularity == GRANULARITY_CHARACTER) ? |
| 92 1 : end_index - start_index; | 92 1 : end_index - start_index; |
| 93 base::string16 selection = text.substr(start_index, len); | 93 base::string16 selection = text.substr(start_index, len); |
| 94 if (base::EndsWith(selection, base::ASCIIToUTF16("\n"), false)) | 94 if (base::EndsWith(selection, base::ASCIIToUTF16("\n"), |
| 95 base::CompareCase::INSENSITIVE_ASCII)) |
| 95 selection.erase(selection.size() - 1); | 96 selection.erase(selection.size() - 1); |
| 96 if (!selection.empty()) { | 97 if (!selection.empty()) { |
| 97 if (!concatenated.empty()) | 98 if (!concatenated.empty()) |
| 98 concatenated += base::ASCIIToUTF16(", "); | 99 concatenated += base::ASCIIToUTF16(", "); |
| 99 concatenated += base::ASCIIToUTF16("'") + selection + | 100 concatenated += base::ASCIIToUTF16("'") + selection + |
| 100 base::ASCIIToUTF16("'"); | 101 base::ASCIIToUTF16("'"); |
| 101 } | 102 } |
| 102 | 103 |
| 103 // Prevent an endless loop. | 104 // Prevent an endless loop. |
| 104 if (end_index == previous_end_index) { | 105 if (end_index == previous_end_index) { |
| 105 LOG(ERROR) << "Bailing from loop, NextAtGranularity didn't advance"; | 106 LOG(ERROR) << "Bailing from loop, NextAtGranularity didn't advance"; |
| 106 break; | 107 break; |
| 107 } | 108 } |
| 108 previous_end_index = end_index; | 109 previous_end_index = end_index; |
| 109 } | 110 } |
| 110 | 111 |
| 111 base::string16 reverse; | 112 base::string16 reverse; |
| 112 previous_end_index = -1; | 113 previous_end_index = -1; |
| 113 start_index = end_index; | 114 start_index = end_index; |
| 114 while (manager->PreviousAtGranularity( | 115 while (manager->PreviousAtGranularity( |
| 115 granularity, start_index, android_node, &start_index, &end_index)) { | 116 granularity, start_index, android_node, &start_index, &end_index)) { |
| 116 int len = (granularity == GRANULARITY_CHARACTER) ? | 117 int len = (granularity == GRANULARITY_CHARACTER) ? |
| 117 1 : end_index - start_index; | 118 1 : end_index - start_index; |
| 118 base::string16 selection = text.substr(start_index, len); | 119 base::string16 selection = text.substr(start_index, len); |
| 119 if (base::EndsWith(selection, base::ASCIIToUTF16("\n"), false)) | 120 if (base::EndsWith(selection, base::ASCIIToUTF16("\n"), |
| 121 base::CompareCase::INSENSITIVE_ASCII)) |
| 120 selection = selection.substr(0, selection.size() - 1); | 122 selection = selection.substr(0, selection.size() - 1); |
| 121 if (!reverse.empty()) | 123 if (!reverse.empty()) |
| 122 reverse = base::ASCIIToUTF16(", ") + reverse; | 124 reverse = base::ASCIIToUTF16(", ") + reverse; |
| 123 reverse = base::ASCIIToUTF16("'") + selection + | 125 reverse = base::ASCIIToUTF16("'") + selection + |
| 124 base::ASCIIToUTF16("'") + reverse; | 126 base::ASCIIToUTF16("'") + reverse; |
| 125 | 127 |
| 126 // Prevent an endless loop. | 128 // Prevent an endless loop. |
| 127 if (end_index == previous_end_index) { | 129 if (end_index == previous_end_index) { |
| 128 LOG(ERROR) << "Bailing from loop, PreviousAtGranularity didn't advance"; | 130 LOG(ERROR) << "Bailing from loop, PreviousAtGranularity didn't advance"; |
| 129 break; | 131 break; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 BrowserAccessibility* root = LoadUrlAndGetAccessibilityRoot(url); | 202 BrowserAccessibility* root = LoadUrlAndGetAccessibilityRoot(url); |
| 201 ASSERT_EQ(1U, root->PlatformChildCount()); | 203 ASSERT_EQ(1U, root->PlatformChildCount()); |
| 202 BrowserAccessibility* pre = root->PlatformGetChild(0); | 204 BrowserAccessibility* pre = root->PlatformGetChild(0); |
| 203 ASSERT_EQ(0U, pre->PlatformChildCount()); | 205 ASSERT_EQ(0U, pre->PlatformChildCount()); |
| 204 | 206 |
| 205 ASSERT_EQ(base::ASCIIToUTF16("'One,', 'two,', 'three!'"), | 207 ASSERT_EQ(base::ASCIIToUTF16("'One,', 'two,', 'three!'"), |
| 206 TraverseNodeAtGranularity(pre, GRANULARITY_LINE)); | 208 TraverseNodeAtGranularity(pre, GRANULARITY_LINE)); |
| 207 } | 209 } |
| 208 | 210 |
| 209 } // namespace content | 211 } // namespace content |
| OLD | NEW |