Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: chrome/browser/devtools/device/android_device_info_query.cc

Issue 1197243004: Replace some Tokenize calls with SplitString. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix android Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/devtools/device/adb/mock_adb_server.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/strings/string_number_conversions.h" 5 #include "base/strings/string_number_conversions.h"
6 #include "base/strings/string_split.h" 6 #include "base/strings/string_split.h"
7 #include "base/strings/string_util.h" 7 #include "base/strings/string_util.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "chrome/browser/devtools/device/android_device_manager.h" 9 #include "chrome/browser/devtools/device/android_device_manager.h"
10 10
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 117
118 using StringMap = std::map<std::string, std::string>; 118 using StringMap = std::map<std::string, std::string>;
119 119
120 void MapProcessesToPackages(const std::string& response, 120 void MapProcessesToPackages(const std::string& response,
121 StringMap* pid_to_package, 121 StringMap* pid_to_package,
122 StringMap* pid_to_user) { 122 StringMap* pid_to_user) {
123 // Parse 'ps' output which on Android looks like this: 123 // Parse 'ps' output which on Android looks like this:
124 // 124 //
125 // USER PID PPID VSIZE RSS WCHAN PC ? NAME 125 // USER PID PPID VSIZE RSS WCHAN PC ? NAME
126 // 126 //
127 std::vector<std::string> entries; 127 for (const base::StringPiece& line :
128 Tokenize(response, "\n", &entries); 128 base::SplitStringPiece(response, "\n", base::KEEP_WHITESPACE,
129 for (size_t i = 1; i < entries.size(); ++i) { 129 base::SPLIT_WANT_NONEMPTY)) {
130 std::vector<std::string> fields; 130 std::vector<std::string> fields =
131 Tokenize(entries[i], " \r", &fields); 131 base::SplitString(line, " \r", base::KEEP_WHITESPACE,
132 base::SPLIT_WANT_NONEMPTY);
132 if (fields.size() < 9) 133 if (fields.size() < 9)
133 continue; 134 continue;
134 std::string pid = fields[1]; 135 std::string pid = fields[1];
135 (*pid_to_package)[pid] = fields[8]; 136 (*pid_to_package)[pid] = fields[8];
136 (*pid_to_user)[pid] = fields[0]; 137 (*pid_to_user)[pid] = fields[0];
137 } 138 }
138 } 139 }
139 140
140 StringMap MapSocketsToProcesses(const std::string& response) { 141 StringMap MapSocketsToProcesses(const std::string& response) {
141 // Parse 'cat /proc/net/unix' output which on Android looks like this: 142 // Parse 'cat /proc/net/unix' output which on Android looks like this:
142 // 143 //
143 // Num RefCount Protocol Flags Type St Inode Path 144 // Num RefCount Protocol Flags Type St Inode Path
144 // 00000000: 00000002 00000000 00010000 0001 01 331813 /dev/socket/zygote 145 // 00000000: 00000002 00000000 00010000 0001 01 331813 /dev/socket/zygote
145 // 00000000: 00000002 00000000 00010000 0001 01 358606 @xxx_devtools_remote 146 // 00000000: 00000002 00000000 00010000 0001 01 358606 @xxx_devtools_remote
146 // 00000000: 00000002 00000000 00010000 0001 01 347300 @yyy_devtools_remote 147 // 00000000: 00000002 00000000 00010000 0001 01 347300 @yyy_devtools_remote
147 // 148 //
148 // We need to find records with paths starting from '@' (abstract socket) 149 // We need to find records with paths starting from '@' (abstract socket)
149 // and containing the channel pattern ("_devtools_remote"). 150 // and containing the channel pattern ("_devtools_remote").
150 StringMap socket_to_pid; 151 StringMap socket_to_pid;
151 std::vector<std::string> entries; 152 for (const base::StringPiece& line :
152 Tokenize(response, "\n", &entries); 153 base::SplitStringPiece(response, "\n", base::KEEP_WHITESPACE,
153 for (size_t i = 1; i < entries.size(); ++i) { 154 base::SPLIT_WANT_NONEMPTY)) {
154 std::vector<std::string> fields; 155 std::vector<std::string> fields =
155 Tokenize(entries[i], " \r", &fields); 156 base::SplitString(line, " \r", base::KEEP_WHITESPACE,
157 base::SPLIT_WANT_NONEMPTY);
156 if (fields.size() < 8) 158 if (fields.size() < 8)
157 continue; 159 continue;
158 if (fields[3] != "00010000" || fields[5] != "01") 160 if (fields[3] != "00010000" || fields[5] != "01")
159 continue; 161 continue;
160 std::string path_field = fields[7]; 162 std::string path_field = fields[7];
161 if (path_field.size() < 1 || path_field[0] != '@') 163 if (path_field.size() < 1 || path_field[0] != '@')
162 continue; 164 continue;
163 size_t socket_name_pos = path_field.find(kDevToolsSocketSuffix); 165 size_t socket_name_pos = path_field.find(kDevToolsSocketSuffix);
164 if (socket_name_pos == std::string::npos) 166 if (socket_name_pos == std::string::npos)
165 continue; 167 continue;
166 168
167 std::string socket = path_field.substr(1); 169 std::string socket = path_field.substr(1);
168 170
169 std::string pid; 171 std::string pid;
170 size_t socket_name_end = socket_name_pos + strlen(kDevToolsSocketSuffix); 172 size_t socket_name_end = socket_name_pos + strlen(kDevToolsSocketSuffix);
171 if (socket_name_end < path_field.size() && 173 if (socket_name_end < path_field.size() &&
172 path_field[socket_name_end] == '_') { 174 path_field[socket_name_end] == '_') {
173 pid = path_field.substr(socket_name_end + 1); 175 pid = path_field.substr(socket_name_end + 1);
174 } 176 }
175 socket_to_pid[socket] = pid; 177 socket_to_pid[socket] = pid;
176 } 178 }
177 return socket_to_pid; 179 return socket_to_pid;
178 } 180 }
179 181
180 gfx::Size ParseScreenSize(const std::string& str) { 182 gfx::Size ParseScreenSize(base::StringPiece str) {
181 std::vector<std::string> pairs; 183 std::vector<base::StringPiece> pairs =
182 Tokenize(str, "-", &pairs); 184 base::SplitStringPiece(str, "-", base::KEEP_WHITESPACE,
185 base::SPLIT_WANT_NONEMPTY);
183 if (pairs.size() != 2) 186 if (pairs.size() != 2)
184 return gfx::Size(); 187 return gfx::Size();
185 188
186 int width; 189 int width;
187 int height; 190 int height;
188 std::vector<std::string> numbers; 191 std::vector<base::StringPiece> numbers =
189 Tokenize(pairs[1].substr(1, pairs[1].size() - 2), ",", &numbers); 192 base::SplitStringPiece(pairs[1].substr(1, pairs[1].size() - 2), ",",
193 base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
190 if (numbers.size() != 2 || 194 if (numbers.size() != 2 ||
191 !base::StringToInt(numbers[0], &width) || 195 !base::StringToInt(numbers[0], &width) ||
192 !base::StringToInt(numbers[1], &height)) 196 !base::StringToInt(numbers[1], &height))
193 return gfx::Size(); 197 return gfx::Size();
194 198
195 return gfx::Size(width, height); 199 return gfx::Size(width, height);
196 } 200 }
197 201
198 gfx::Size ParseWindowPolicyResponse(const std::string& response) { 202 gfx::Size ParseWindowPolicyResponse(const std::string& response) {
199 std::vector<std::string> lines; 203 for (const base::StringPiece& line :
200 Tokenize(response, "\r", &lines); 204 base::SplitStringPiece(response, "\r", base::KEEP_WHITESPACE,
201 for (const std::string& line : lines) { 205 base::SPLIT_WANT_NONEMPTY)) {
202 size_t pos = line.find(kScreenSizePrefix); 206 size_t pos = line.find(kScreenSizePrefix);
203 if (pos != std::string::npos) { 207 if (pos != base::StringPiece::npos) {
204 return ParseScreenSize( 208 return ParseScreenSize(
205 line.substr(pos + strlen(kScreenSizePrefix))); 209 line.substr(pos + strlen(kScreenSizePrefix)));
206 } 210 }
207 } 211 }
208 return gfx::Size(); 212 return gfx::Size();
209 } 213 }
210 214
211 StringMap MapIdsToUsers(const std::string& response) { 215 StringMap MapIdsToUsers(const std::string& response) {
212 // Parse 'dumpsys user' output which looks like this: 216 // Parse 'dumpsys user' output which looks like this:
213 // Users: 217 // Users:
214 // UserInfo{0:Test User:13} serialNo=0 218 // UserInfo{0:Test User:13} serialNo=0
215 // Created: <unknown> 219 // Created: <unknown>
216 // Last logged in: +17m18s871ms ago 220 // Last logged in: +17m18s871ms ago
217 // UserInfo{10:User with : (colon):10} serialNo=10 221 // UserInfo{10:User with : (colon):10} serialNo=10
218 // Created: +3d4h35m1s139ms ago 222 // Created: +3d4h35m1s139ms ago
219 // Last logged in: +17m26s287ms ago 223 // Last logged in: +17m26s287ms ago
220 StringMap id_to_username; 224 StringMap id_to_username;
221 std::vector<std::string> lines; 225 for (const base::StringPiece& line :
222 Tokenize(response, "\r", &lines); 226 base::SplitStringPiece(response, "\r", base::KEEP_WHITESPACE,
223 for (const std::string& line : lines) { 227 base::SPLIT_WANT_NONEMPTY)) {
224 size_t pos = line.find(kUserInfoPrefix); 228 size_t pos = line.find(kUserInfoPrefix);
225 if (pos != std::string::npos) { 229 if (pos != std::string::npos) {
226 std::string fields = line.substr(pos + strlen(kUserInfoPrefix)); 230 base::StringPiece fields = line.substr(pos + strlen(kUserInfoPrefix));
227 size_t first_pos = fields.find_first_of(":"); 231 size_t first_pos = fields.find_first_of(":");
228 size_t last_pos = fields.find_last_of(":"); 232 size_t last_pos = fields.find_last_of(":");
229 if (first_pos != std::string::npos && last_pos != std::string::npos) { 233 if (first_pos != std::string::npos && last_pos != std::string::npos) {
230 std::string id = fields.substr(0, first_pos); 234 std::string id = fields.substr(0, first_pos).as_string();
231 std::string name = fields.substr(first_pos + 1, 235 std::string name = fields.substr(first_pos + 1,
232 last_pos - first_pos - 1); 236 last_pos - first_pos - 1).as_string();
233 id_to_username[id] = name; 237 id_to_username[id] = name;
234 } 238 }
235 } 239 }
236 } 240 }
237 return id_to_username; 241 return id_to_username;
238 } 242 }
239 243
240 std::string GetUserName(const std::string& unix_user, 244 std::string GetUserName(const std::string& unix_user,
241 const StringMap id_to_username) { 245 const StringMap id_to_username) {
242 // Parse username as returned by ps which looks like 'u0_a31' 246 // Parse username as returned by ps which looks like 'u0_a31'
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 } 354 }
351 355
352 // static 356 // static
353 void AndroidDeviceManager::QueryDeviceInfo( 357 void AndroidDeviceManager::QueryDeviceInfo(
354 const RunCommandCallback& command_callback, 358 const RunCommandCallback& command_callback,
355 const DeviceInfoCallback& callback) { 359 const DeviceInfoCallback& callback) {
356 command_callback.Run( 360 command_callback.Run(
357 kAllCommands, 361 kAllCommands,
358 base::Bind(&ReceivedResponse, callback)); 362 base::Bind(&ReceivedResponse, callback));
359 } 363 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/device/adb/mock_adb_server.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698