From 8cc24ae2b51f9db4a16011eb1ab7dbfca0eb6d54 Mon Sep 17 00:00:00 2001 From: brettw Date: Mon, 6 Jul 2015 16:53:00 -0700 Subject: [PATCH] Replace remaining Tokenize calls to SplitString SplitString is now more general and does the job of Tokenize with specific parameters. The biggest change is in time_util.cc where the old return pattern better matched how the code was structured. With the new style the conditionals are more nested. Some simple cases were changed to StringPieces when copies were not required. BUG=506920, 506255 Review URL: https://codereview.chromium.org/1219263002 Cr-Commit-Position: refs/heads/master@{#337520} --- base/strings/string_util.cc | 24 ----- base/strings/string_util.h | 16 ---- base/strings/string_util_unittest.cc | 102 --------------------- base/trace_event/trace_event_memory.cc | 8 +- .../devtools_protocol_constants_generator.py | 5 +- .../dump_accessibility_tree_browsertest.cc | 7 +- .../appcache/view_appcache_internals_job.cc | 25 ++--- .../browser/cache_storage/cache_storage_cache.cc | 10 +- .../devtools_protocol_handler_generator.py | 5 +- content/common/sandbox_mac.mm | 7 +- content/test/mock_google_streaming_server.cc | 12 +-- .../browser/api/vpn_provider/vpn_provider_api.cc | 7 +- .../common/manifest_handlers/shared_module_info.cc | 9 +- google_apis/drive/time_util.cc | 71 ++++++++------ google_apis/gaia/oauth2_mint_token_flow.cc | 9 +- google_apis/gcm/engine/account_mapping.cc | 5 +- gpu/command_buffer/service/feature_info.cc | 4 +- gpu/command_buffer/service/test_helper.cc | 4 +- media/blink/cache_util_unittest.cc | 13 +-- media/ffmpeg/ffmpeg_common.cc | 30 +++--- media/filters/stream_parser_factory.cc | 7 +- media/formats/mp4/avc_unittest.cc | 12 ++- media/test/pipeline_integration_test.cc | 4 +- net/proxy/proxy_config_service_linux.cc | 9 +- net/server/http_server_request_info.cc | 12 +-- .../dump_cache/url_to_filename_encoder_unittest.cc | 9 +- net/tools/quic/quic_client_bin.cc | 8 +- net/tools/quic/quic_simple_client_bin.cc | 8 +- net/url_request/url_request_http_job_unittest.cc | 9 +- remoting/base/capabilities.cc | 18 ++-- remoting/base/capabilities_unittest.cc | 12 +-- remoting/host/client_session_unittest.cc | 11 ++- .../host_extension_session_manager_unittest.cc | 6 +- sync/test/fake_server/fake_server_entity.cc | 7 +- ui/aura/window_tree_host_x11.cc | 8 +- .../dragdrop/os_exchange_data_provider_aurax11.cc | 10 +- ui/base/ime/chromeos/input_method_whitelist.cc | 6 +- ui/base/x/selection_utils.cc | 7 +- .../libgestures_glue/gesture_property_provider.cc | 3 +- .../ozone/evdev/touch_event_converter_evdev.cc | 10 +- ui/gl/gl_egl_api_implementation.cc | 12 ++- ui/gl/gl_gl_api_implementation.cc | 14 ++- win8/metro_driver/file_picker.cc | 10 +- win8/metro_driver/file_picker_ash.cc | 11 +-- 44 files changed, 260 insertions(+), 336 deletions(-) diff --git a/base/strings/string_util.cc b/base/strings/string_util.cc index e2b7311636f1..380d455f3939 100644 --- a/base/strings/string_util.cc +++ b/base/strings/string_util.cc @@ -810,30 +810,6 @@ void ReplaceSubstringsAfterOffset(std::string* str, } // namespace base -size_t Tokenize(const base::string16& str, - const base::string16& delimiters, - std::vector* tokens) { - *tokens = base::SplitString( - str, delimiters, base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - return tokens->size(); -} - -size_t Tokenize(const std::string& str, - const std::string& delimiters, - std::vector* tokens) { - *tokens = base::SplitString( - str, delimiters, base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - return tokens->size(); -} - -size_t Tokenize(const base::StringPiece& str, - const base::StringPiece& delimiters, - std::vector* tokens) { - *tokens = base::SplitStringPiece( - str, delimiters, base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - return tokens->size(); -} - template static STR JoinStringT(const std::vector& parts, const STR& sep) { if (parts.empty()) diff --git a/base/strings/string_util.h b/base/strings/string_util.h index f5cf0b38db9c..c2316099c948 100644 --- a/base/strings/string_util.h +++ b/base/strings/string_util.h @@ -492,22 +492,6 @@ inline typename string_type::value_type* WriteInto(string_type* str, //----------------------------------------------------------------------------- -// Splits a string into its fields delimited by any of the characters in -// |delimiters|. Each field is added to the |tokens| vector. Returns the -// number of tokens found. -// -// DEPRECATED. Use base::SplitString for new code (these just forward). -// TODO(brettw) convert callers and delete these forwarders. -BASE_EXPORT size_t Tokenize(const base::string16& str, - const base::string16& delimiters, - std::vector* tokens); -BASE_EXPORT size_t Tokenize(const std::string& str, - const std::string& delimiters, - std::vector* tokens); -BASE_EXPORT size_t Tokenize(const base::StringPiece& str, - const base::StringPiece& delimiters, - std::vector* tokens); - // Does the opposite of SplitString(). BASE_EXPORT base::string16 JoinString(const std::vector& parts, base::char16 s); diff --git a/base/strings/string_util_unittest.cc b/base/strings/string_util_unittest.cc index ad7ff247c993..02b184cc6202 100644 --- a/base/strings/string_util_unittest.cc +++ b/base/strings/string_util_unittest.cc @@ -669,108 +669,6 @@ TEST(StringUtilTest, HexDigitToInt) { EXPECT_EQ(15, HexDigitToInt('f')); } -// Test for Tokenize -template -void TokenizeTest() { - std::vector r; - size_t size; - - size = Tokenize(STR("This is a string"), STR(" "), &r); - EXPECT_EQ(4U, size); - ASSERT_EQ(4U, r.size()); - EXPECT_EQ(r[0], STR("This")); - EXPECT_EQ(r[1], STR("is")); - EXPECT_EQ(r[2], STR("a")); - EXPECT_EQ(r[3], STR("string")); - r.clear(); - - size = Tokenize(STR("one,two,three"), STR(","), &r); - EXPECT_EQ(3U, size); - ASSERT_EQ(3U, r.size()); - EXPECT_EQ(r[0], STR("one")); - EXPECT_EQ(r[1], STR("two")); - EXPECT_EQ(r[2], STR("three")); - r.clear(); - - size = Tokenize(STR("one,two:three;four"), STR(",:"), &r); - EXPECT_EQ(3U, size); - ASSERT_EQ(3U, r.size()); - EXPECT_EQ(r[0], STR("one")); - EXPECT_EQ(r[1], STR("two")); - EXPECT_EQ(r[2], STR("three;four")); - r.clear(); - - size = Tokenize(STR("one,two:three;four"), STR(";,:"), &r); - EXPECT_EQ(4U, size); - ASSERT_EQ(4U, r.size()); - EXPECT_EQ(r[0], STR("one")); - EXPECT_EQ(r[1], STR("two")); - EXPECT_EQ(r[2], STR("three")); - EXPECT_EQ(r[3], STR("four")); - r.clear(); - - size = Tokenize(STR("one, two, three"), STR(","), &r); - EXPECT_EQ(3U, size); - ASSERT_EQ(3U, r.size()); - EXPECT_EQ(r[0], STR("one")); - EXPECT_EQ(r[1], STR(" two")); - EXPECT_EQ(r[2], STR(" three")); - r.clear(); - - size = Tokenize(STR("one, two, three, "), STR(","), &r); - EXPECT_EQ(4U, size); - ASSERT_EQ(4U, r.size()); - EXPECT_EQ(r[0], STR("one")); - EXPECT_EQ(r[1], STR(" two")); - EXPECT_EQ(r[2], STR(" three")); - EXPECT_EQ(r[3], STR(" ")); - r.clear(); - - size = Tokenize(STR("one, two, three,"), STR(","), &r); - EXPECT_EQ(3U, size); - ASSERT_EQ(3U, r.size()); - EXPECT_EQ(r[0], STR("one")); - EXPECT_EQ(r[1], STR(" two")); - EXPECT_EQ(r[2], STR(" three")); - r.clear(); - - size = Tokenize(STR(), STR(","), &r); - EXPECT_EQ(0U, size); - ASSERT_EQ(0U, r.size()); - r.clear(); - - size = Tokenize(STR(","), STR(","), &r); - EXPECT_EQ(0U, size); - ASSERT_EQ(0U, r.size()); - r.clear(); - - size = Tokenize(STR(",;:."), STR(".:;,"), &r); - EXPECT_EQ(0U, size); - ASSERT_EQ(0U, r.size()); - r.clear(); - - size = Tokenize(STR("\t\ta\t"), STR("\t"), &r); - EXPECT_EQ(1U, size); - ASSERT_EQ(1U, r.size()); - EXPECT_EQ(r[0], STR("a")); - r.clear(); - - size = Tokenize(STR("\ta\t\nb\tcc"), STR("\n"), &r); - EXPECT_EQ(2U, size); - ASSERT_EQ(2U, r.size()); - EXPECT_EQ(r[0], STR("\ta\t")); - EXPECT_EQ(r[1], STR("b\tcc")); - r.clear(); -} - -TEST(StringUtilTest, TokenizeStdString) { - TokenizeTest(); -} - -TEST(StringUtilTest, TokenizeStringPiece) { - TokenizeTest(); -} - // Test for JoinString TEST(StringUtilTest, JoinString) { std::vector in; diff --git a/base/trace_event/trace_event_memory.cc b/base/trace_event/trace_event_memory.cc index b173838cb4f0..73c8536cac2a 100644 --- a/base/trace_event/trace_event_memory.cc +++ b/base/trace_event/trace_event_memory.cc @@ -347,8 +347,8 @@ void AppendHeapProfileTotalsAsTraceFormat(const std::string& line, // 55227 = Outstanding bytes (malloc bytes - free bytes) // 14653 = Total allocations (mallocs) // 2624014 = Total bytes (malloc bytes) - std::vector tokens; - Tokenize(line, " :[]@", &tokens); + std::vector tokens = base::SplitString( + line, " :[]@", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); if (tokens.size() < 4) { DLOG(WARNING) << "Invalid totals line " << line; return; @@ -377,8 +377,8 @@ bool AppendHeapProfileLineAsTraceFormat(const std::string& line, // 0x7fa7fa9b9ba0 0x7fa7f4b3be13 = Stack trace represented as pointers to // static strings from trace event categories // and names. - std::vector tokens; - Tokenize(line, " :[]@", &tokens); + std::vector tokens = base::SplitString( + line, " :[]@", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); // It's valid to have no stack addresses, so only require 4 tokens. if (tokens.size() < 4) { DLOG(WARNING) << "Invalid line " << line; diff --git a/chrome/browser/devtools/devtools_protocol_constants_generator.py b/chrome/browser/devtools/devtools_protocol_constants_generator.py index 372874d4863f..7e53ac1c9a13 100755 --- a/chrome/browser/devtools/devtools_protocol_constants_generator.py +++ b/chrome/browser/devtools/devtools_protocol_constants_generator.py @@ -57,6 +57,7 @@ template_cc = string.Template("""\ // content/browser/devtools/browser_protocol.json #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "$package/browser/devtools/devtools_protocol_constants.h" @@ -66,8 +67,8 @@ namespace devtools { const char kProtocolVersion[] = "$major.$minor"; bool IsSupportedProtocolVersion(const std::string& version) { - std::vector tokens; - Tokenize(version, ".", &tokens); + std::vector tokens = base::SplitStringPiece( + version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); int major, minor; return tokens.size() == 2 && base::StringToInt(tokens[0], &major) && major == $major && diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index b138380a857a..62ce4a20fdac 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc @@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/path_service.h" #include "base/strings/string16.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "content/browser/accessibility/accessibility_tree_formatter.h" @@ -94,9 +95,9 @@ class DumpAccessibilityTreeTest : public DumpAccessibilityTestBase { base::string16 actual_contents_utf16; formatter.FormatAccessibilityTree(&actual_contents_utf16); std::string actual_contents = base::UTF16ToUTF8(actual_contents_utf16); - std::vector actual_lines; - Tokenize(actual_contents, "\n", &actual_lines); - return actual_lines; + return base::SplitString( + actual_contents, "\n", + base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); } }; diff --git a/content/browser/appcache/view_appcache_internals_job.cc b/content/browser/appcache/view_appcache_internals_job.cc index 3ef6f81c0b47..f7a814af2247 100644 --- a/content/browser/appcache/view_appcache_internals_job.cc +++ b/content/browser/appcache/view_appcache_internals_job.cc @@ -276,7 +276,7 @@ void EmitHexDump(const char *buf, size_t buf_len, size_t total_len, out->append(""); } -GURL DecodeBase64URL(const std::string& base64) { +GURL DecodeBase64URL(base::StringPiece base64) { std::string url; base::Base64Decode(base64, &url); return GURL(url); @@ -647,16 +647,19 @@ net::URLRequestJob* ViewAppCacheInternalsJobFactory::CreateJobForRequest( return new ViewAppCacheJob(request, network_delegate, service, DecodeBase64URL(param)); - std::vector tokens; - int64 response_id = 0; - int64 group_id = 0; - if (command == kViewEntryCommand && Tokenize(param, "|", &tokens) == 4u && - base::StringToInt64(tokens[2], &response_id) && - base::StringToInt64(tokens[3], &group_id)) { - return new ViewEntryJob(request, network_delegate, service, - DecodeBase64URL(tokens[0]), // manifest url - DecodeBase64URL(tokens[1]), // entry url - response_id, group_id); + if (command == kViewEntryCommand) { + std::vector tokens = base::SplitStringPiece( + param, "|", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + int64 response_id = 0; + int64 group_id = 0; + if (tokens.size() == 4u && + base::StringToInt64(tokens[2], &response_id) && + base::StringToInt64(tokens[3], &group_id)) { + return new ViewEntryJob(request, network_delegate, service, + DecodeBase64URL(tokens[0]), // manifest url + DecodeBase64URL(tokens[1]), // entry url + response_id, group_id); + } } return new RedirectToMainPageJob(request, network_delegate, service); diff --git a/content/browser/cache_storage/cache_storage_cache.cc b/content/browser/cache_storage/cache_storage_cache.cc index 31a51297f4c9..27556662438c 100644 --- a/content/browser/cache_storage/cache_storage_cache.cc +++ b/content/browser/cache_storage/cache_storage_cache.cc @@ -10,6 +10,7 @@ #include "base/files/file_path.h" #include "base/guid.h" #include "base/metrics/histogram_macros.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "content/browser/cache_storage/cache_storage.pb.h" #include "content/browser/cache_storage/cache_storage_blob_to_disk_cache.h" @@ -114,12 +115,9 @@ bool VaryMatches(const ServiceWorkerHeaderMap& request, if (vary_iter == response.end()) return true; - std::vector vary_keys; - Tokenize(vary_iter->second, ",", &vary_keys); - for (std::vector::const_iterator it = vary_keys.begin(); - it != vary_keys.end(); ++it) { - std::string trimmed; - base::TrimWhitespaceASCII(*it, base::TRIM_ALL, &trimmed); + for (const std::string& trimmed : + base::SplitString(vary_iter->second, ",", + base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) { if (trimmed == "*") return false; diff --git a/content/browser/devtools/protocol/devtools_protocol_handler_generator.py b/content/browser/devtools/protocol/devtools_protocol_handler_generator.py index 0ba741503f99..da984685ccc3 100755 --- a/content/browser/devtools/protocol/devtools_protocol_handler_generator.py +++ b/content/browser/devtools/protocol/devtools_protocol_handler_generator.py @@ -244,6 +244,7 @@ template_cc = string.Template(header + """\ #include "base/bind.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" ${includes}\ namespace content { @@ -271,8 +272,8 @@ namespace devtools { const char kProtocolVersion[] = "${major}.${minor}"; bool IsSupportedProtocolVersion(const std::string& version) { - std::vector tokens; - Tokenize(version, ".", &tokens); + std::vector tokens = base::SplitStringPiece( + version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); int major, minor; return tokens.size() == 2 && base::StringToInt(tokens[0], &major) && major == ${major} && diff --git a/content/common/sandbox_mac.mm b/content/common/sandbox_mac.mm index a13aaf773727..2da81a9100d0 100644 --- a/content/common/sandbox_mac.mm +++ b/content/common/sandbox_mac.mm @@ -27,6 +27,7 @@ extern "C" { #include "base/rand_util.h" #include "base/strings/string16.h" #include "base/strings/string_piece.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/sys_string_conversions.h" @@ -456,8 +457,10 @@ bool Sandbox::PostProcessSandboxProfile( } // Split string on "@" characters. - std::vector raw_sandbox_pieces; - if (Tokenize([sandbox_data UTF8String], "@", &raw_sandbox_pieces) == 0) { + std::vector raw_sandbox_pieces = base::SplitString( + [sandbox_data UTF8String], "@", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); + if (raw_sandbox_pieces.empty()) { DLOG(FATAL) << "Bad Sandbox profile, should contain at least one token (" << [sandbox_data UTF8String] << ")"; diff --git a/content/test/mock_google_streaming_server.cc b/content/test/mock_google_streaming_server.cc index 5d8b846a6439..ad9937aae765 100644 --- a/content/test/mock_google_streaming_server.cc +++ b/content/test/mock_google_streaming_server.cc @@ -6,6 +6,7 @@ #include "base/bind.h" #include "base/numerics/safe_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/sys_byteorder.h" @@ -41,17 +42,16 @@ void MockGoogleStreamingServer::OnRequestStart(int fetcher_id) { // Extract request argument from the the request URI. std::string query = GetURLFetcher(true)->GetOriginalURL().query(); - std::vector query_params; - Tokenize(query, "&", &query_params); const net::UnescapeRule::Type kUnescapeAll = net::UnescapeRule::NORMAL | net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS | net::UnescapeRule::REPLACE_PLUS_WITH_SPACE; - for (size_t i = 0; i < query_params.size(); ++i) { - const std::string query_param = query_params[i]; - std::vector param_parts; - Tokenize(query_param, "=", ¶m_parts); + for (const base::StringPiece& query_param : + base::SplitStringPiece(query, "&", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { + std::vector param_parts = base::SplitString( + query_param, "=", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); if (param_parts.size() != 2) continue; std::string param_key = net::UnescapeURLComponent(param_parts[0], diff --git a/extensions/browser/api/vpn_provider/vpn_provider_api.cc b/extensions/browser/api/vpn_provider/vpn_provider_api.cc index fb82aab15def..069f171fb7e7 100644 --- a/extensions/browser/api/vpn_provider/vpn_provider_api.cc +++ b/extensions/browser/api/vpn_provider/vpn_provider_api.cc @@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/memory/scoped_ptr.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/values.h" #include "extensions/browser/api/vpn_provider/vpn_service.h" @@ -100,8 +101,10 @@ void ConvertParameters(const api_vpn::Parameters& parameters, return; } - std::vector cidr_parts; - CHECK(Tokenize(parameters.address, kCIDRSeperator, &cidr_parts) == 2); + std::vector cidr_parts = base::SplitString( + parameters.address, kCIDRSeperator, base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); + CHECK_EQ(2u, cidr_parts.size()); parameter_value->SetStringWithoutPathExpansion( shill::kAddressParameterThirdPartyVpn, cidr_parts[0]); diff --git a/extensions/common/manifest_handlers/shared_module_info.cc b/extensions/common/manifest_handlers/shared_module_info.cc index 70f6ea93f89f..99efe8828fdc 100644 --- a/extensions/common/manifest_handlers/shared_module_info.cc +++ b/extensions/common/manifest_handlers/shared_module_info.cc @@ -7,6 +7,7 @@ #include "base/lazy_instance.h" #include "base/memory/scoped_ptr.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/version.h" @@ -50,8 +51,8 @@ SharedModuleInfo::~SharedModuleInfo() { void SharedModuleInfo::ParseImportedPath(const std::string& path, std::string* import_id, std::string* import_relative_path) { - std::vector tokens; - Tokenize(path, std::string("/"), &tokens); + std::vector tokens = base::SplitString( + path, "/", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); if (tokens.size() > 2 && tokens[0] == kModulesDir && crx_file::id_util::IdIsValid(tokens[1])) { *import_id = tokens[1]; @@ -63,8 +64,8 @@ void SharedModuleInfo::ParseImportedPath(const std::string& path, // static bool SharedModuleInfo::IsImportedPath(const std::string& path) { - std::vector tokens; - Tokenize(path, std::string("/"), &tokens); + std::vector tokens = base::SplitString( + path, "/", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); if (tokens.size() > 2 && tokens[0] == kModulesDir && crx_file::id_util::IdIsValid(tokens[1])) { return true; diff --git a/google_apis/drive/time_util.cc b/google_apis/drive/time_util.cc index 6ac55e944c62..cf2b453d38c7 100644 --- a/google_apis/drive/time_util.cc +++ b/google_apis/drive/time_util.cc @@ -8,6 +8,7 @@ #include #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/time/time.h" @@ -24,15 +25,15 @@ bool ParseTimezone(const base::StringPiece& timezone, int* out_offset_to_utc_in_minutes) { DCHECK(out_offset_to_utc_in_minutes); - std::vector parts; - int num_of_token = Tokenize(timezone, ":", &parts); + std::vector parts = base::SplitStringPiece( + timezone, ":", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); int hour = 0; - if (!base::StringToInt(parts[0], &hour)) + if (parts.empty() || !base::StringToInt(parts[0], &hour)) return false; int minute = 0; - if (num_of_token > 1 && !base::StringToInt(parts[1], &minute)) + if (parts.size() > 1 && !base::StringToInt(parts[1], &minute)) return false; *out_offset_to_utc_in_minutes = (hour * 60 + minute) * (ahead ? +1 : -1); @@ -52,8 +53,9 @@ bool GetTimeFromString(const base::StringPiece& raw_value, // Splits the string into "date" part and "time" part. { - std::vector parts; - if (Tokenize(raw_value, "T", &parts) != 2) + std::vector parts = base::SplitStringPiece( + raw_value, "T", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (parts.size() != 2) return false; date = parts[0]; time_and_tz = parts[1]; @@ -68,28 +70,37 @@ bool GetTimeFromString(const base::StringPiece& raw_value, offset_to_utc_in_minutes = 0; time = time_and_tz; time.remove_suffix(1); - } else if (Tokenize(time_and_tz, "+", &parts) == 2) { - // Timezone is "+hh:mm" format - if (!ParseTimezone(parts[1], true, &offset_to_utc_in_minutes)) - return false; - has_timezone = true; - time = parts[0]; - } else if (Tokenize(time_and_tz, "-", &parts) == 2) { - // Timezone is "-hh:mm" format - if (!ParseTimezone(parts[1], false, &offset_to_utc_in_minutes)) - return false; - has_timezone = true; - time = parts[0]; } else { - // No timezone (uses local timezone) - time = time_and_tz; + parts = base::SplitStringPiece( + time_and_tz, "+", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (parts.size() == 2) { + // Timezone is "+hh:mm" format + if (!ParseTimezone(parts[1], true, &offset_to_utc_in_minutes)) + return false; + has_timezone = true; + time = parts[0]; + } else { + parts = base::SplitStringPiece( + time_and_tz, "-", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (parts.size() == 2) { + // Timezone is "-hh:mm" format + if (!ParseTimezone(parts[1], false, &offset_to_utc_in_minutes)) + return false; + has_timezone = true; + time = parts[0]; + } else { + // No timezone (uses local timezone) + time = time_and_tz; + } + } } } // Parses the date part. { - std::vector parts; - if (Tokenize(date, "-", &parts) != 3) + std::vector parts = base::SplitStringPiece( + date, "-", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (parts.size() != 3) return false; if (!base::StringToInt(parts[0], &exploded.year) || @@ -101,9 +112,9 @@ bool GetTimeFromString(const base::StringPiece& raw_value, // Parses the time part. { - std::vector parts; - int num_of_token = Tokenize(time, ":", &parts); - if (num_of_token != 3) + std::vector parts = base::SplitStringPiece( + time, ":", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (parts.size() != 3) return false; if (!base::StringToInt(parts[0], &exploded.hour) || @@ -111,16 +122,16 @@ bool GetTimeFromString(const base::StringPiece& raw_value, return false; } - std::vector seconds_parts; - int num_of_seconds_token = Tokenize(parts[2], ".", &seconds_parts); - if (num_of_seconds_token >= 3) + std::vector seconds_parts = base::SplitStringPiece( + parts[2], ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (seconds_parts.size() >= 3) return false; if (!base::StringToInt(seconds_parts[0], &exploded.second)) - return false; + return false; // Only accept milli-seconds (3-digits). - if (num_of_seconds_token > 1 && + if (seconds_parts.size() > 1 && seconds_parts[1].length() == 3 && !base::StringToInt(seconds_parts[1], &exploded.millisecond)) { return false; diff --git a/google_apis/gaia/oauth2_mint_token_flow.cc b/google_apis/gaia/oauth2_mint_token_flow.cc index 9818f089ab79..0316c6328eae 100644 --- a/google_apis/gaia/oauth2_mint_token_flow.cc +++ b/google_apis/gaia/oauth2_mint_token_flow.cc @@ -13,6 +13,7 @@ #include "base/json/json_reader.h" #include "base/message_loop/message_loop.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" @@ -262,11 +263,9 @@ bool OAuth2MintTokenFlow::ParseIssueAdviceResponse( } base::TrimWhitespace(entry.description, base::TRIM_ALL, &entry.description); - static const base::string16 detail_separators = - base::ASCIIToUTF16(kDetailSeparators); - Tokenize(detail, detail_separators, &entry.details); - for (size_t i = 0; i < entry.details.size(); i++) - base::TrimWhitespace(entry.details[i], base::TRIM_ALL, &entry.details[i]); + entry.details = base::SplitString( + detail, base::ASCIIToUTF16(kDetailSeparators), + base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); issue_advice->push_back(entry); } diff --git a/google_apis/gcm/engine/account_mapping.cc b/google_apis/gcm/engine/account_mapping.cc index db7b3a10dcdb..7b0bfb0e3efb 100644 --- a/google_apis/gcm/engine/account_mapping.cc +++ b/google_apis/gcm/engine/account_mapping.cc @@ -5,6 +5,7 @@ #include "google_apis/gcm/engine/account_mapping.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" namespace gcm { @@ -80,8 +81,8 @@ std::string AccountMapping::SerializeAsString() const { } bool AccountMapping::ParseFromString(const std::string& value) { - std::vector values; - Tokenize(value, kSeparator, &values); + std::vector values = base::SplitString( + value, kSeparator, base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); if (values.size() != kSizeWithNoMessage && values.size() != kSizeWithMessage) { return false; diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index c747383ee818..0ce99809114c 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -56,8 +56,8 @@ class StringSet { } void Init(const std::string& str) { - std::vector tokens; - Tokenize(str, " ", &tokens); + std::vector tokens = base::SplitString( + str, " ", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); string_set_.insert(tokens.begin(), tokens.end()); } diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc index a0f144b6a324..308ab8e8ffdc 100644 --- a/gpu/command_buffer/service/test_helper.cc +++ b/gpu/command_buffer/service/test_helper.cc @@ -8,6 +8,7 @@ #include #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_tokenizer.h" #include "gpu/command_buffer/service/buffer_manager.h" #include "gpu/command_buffer/service/error_state_mock.h" @@ -364,7 +365,8 @@ void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( // Persistent storage is needed for the split extension string. split_extensions_.clear(); if (extensions) { - Tokenize(extensions, " ", &split_extensions_); + split_extensions_ = base::SplitString( + extensions, " ", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); } gfx::GLVersionInfo gl_info(gl_version, gl_renderer, extensions); diff --git a/media/blink/cache_util_unittest.cc b/media/blink/cache_util_unittest.cc index 7ea2f130422f..56dc49e2e5d4 100644 --- a/media/blink/cache_util_unittest.cc +++ b/media/blink/cache_util_unittest.cc @@ -8,6 +8,7 @@ #include "base/format_macros.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "testing/gtest/include/gtest/gtest.h" @@ -33,13 +34,13 @@ static WebURLResponse CreateResponse(const GRFUTestCase& test) { response.initialize(); response.setHTTPVersion(test.version); response.setHTTPStatusCode(test.status_code); - std::vector lines; - Tokenize(test.headers, "\n", &lines); - for (size_t i = 0; i < lines.size(); ++i) { - size_t colon = lines[i].find(": "); + for (const std::string& line : + base::SplitString(test.headers, "\n", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { + size_t colon = line.find(": "); response.addHTTPHeaderField( - WebString::fromUTF8(lines[i].substr(0, colon)), - WebString::fromUTF8(lines[i].substr(colon + 2))); + WebString::fromUTF8(line.substr(0, colon)), + WebString::fromUTF8(line.substr(colon + 2))); } return response; } diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc index 25f6ed419961..cb806c74812a 100644 --- a/media/ffmpeg/ffmpeg_common.cc +++ b/media/ffmpeg/ffmpeg_common.cc @@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/metrics/histogram.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "media/base/decoder_buffer.h" #include "media/base/video_util.h" @@ -563,23 +564,30 @@ PixelFormat VideoFormatToPixelFormat(VideoFrame::Format video_format) { return PIX_FMT_NONE; } -bool FFmpegUTCDateToTime(const char* date_utc, - base::Time* out) { +bool FFmpegUTCDateToTime(const char* date_utc, base::Time* out) { DCHECK(date_utc); DCHECK(out); - std::vector fields; - std::vector date_fields; - std::vector time_fields; - base::Time::Exploded exploded; - exploded.millisecond = 0; + std::vector fields = base::SplitStringPiece( + date_utc, " ", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (fields.size() != 2) + return false; + + std::vector date_fields = base::SplitStringPiece( + fields[0], "-", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (date_fields.size() != 3) + return false; // TODO(acolwell): Update this parsing code when FFmpeg returns sub-second // information. - if ((Tokenize(date_utc, " ", &fields) == 2) && - (Tokenize(fields[0], "-", &date_fields) == 3) && - (Tokenize(fields[1], ":", &time_fields) == 3) && - base::StringToInt(date_fields[0], &exploded.year) && + std::vector time_fields = base::SplitStringPiece( + fields[1], ":", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (time_fields.size() != 3) + return false; + + base::Time::Exploded exploded; + exploded.millisecond = 0; + if (base::StringToInt(date_fields[0], &exploded.year) && base::StringToInt(date_fields[1], &exploded.month) && base::StringToInt(date_fields[2], &exploded.day_of_month) && base::StringToInt(time_fields[0], &exploded.hour) && diff --git a/media/filters/stream_parser_factory.cc b/media/filters/stream_parser_factory.cc index cac29e133803..9ea2b0e3a2dd 100644 --- a/media/filters/stream_parser_factory.cc +++ b/media/filters/stream_parser_factory.cc @@ -8,6 +8,7 @@ #include "base/metrics/histogram.h" #include "base/strings/pattern.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "media/base/media_switches.h" #include "media/formats/mpeg/adts_stream_parser.h" @@ -111,9 +112,9 @@ static int GetMP4AudioObjectType(const std::string& codec_id, // the second element is a hexadecimal representation of the MP4 Registration // Authority ObjectTypeIndication (OTI). Note that MP4RA uses a leading "0x" // with these values, which is omitted here and hence implied. - std::vector tokens; - if (Tokenize(codec_id, ".", &tokens) == 3 && - tokens[0] == "mp4a" && tokens[1] == "40") { + std::vector tokens = base::SplitStringPiece( + codec_id, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (tokens.size() == 3 && tokens[0] == "mp4a" && tokens[1] == "40") { // From RFC 6381 section 3.3: // One of the OTI values for 'mp4a' is 40 (identifying MPEG-4 audio). For // this value, the third element identifies the audio ObjectTypeIndication diff --git a/media/formats/mp4/avc_unittest.cc b/media/formats/mp4/avc_unittest.cc index b0aa976a5156..e9ec17b8bd8d 100644 --- a/media/formats/mp4/avc_unittest.cc +++ b/media/formats/mp4/avc_unittest.cc @@ -5,6 +5,7 @@ #include #include "base/basictypes.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "media/base/decrypt_config.h" #include "media/base/stream_parser_buffer.h" @@ -134,16 +135,19 @@ void StringToAnnexB(const std::string& str, std::vector* buffer, std::vector* subsamples) { DCHECK(!str.empty()); - std::vector subsample_specs; - EXPECT_GT(Tokenize(str, " ", &subsample_specs), 0u); + std::vector subsample_specs = base::SplitString( + str, " ", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + EXPECT_GT(subsample_specs.size(), 0u); buffer->clear(); for (size_t i = 0; i < subsample_specs.size(); ++i) { SubsampleEntry entry; size_t start = buffer->size(); - std::vector subsample_nalus; - EXPECT_GT(Tokenize(subsample_specs[i], ",", &subsample_nalus), 0u); + std::vector subsample_nalus = base::SplitString( + subsample_specs[i], ",", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); + EXPECT_GT(subsample_nalus.size(), 0u); for (size_t j = 0; j < subsample_nalus.size(); ++j) { WriteStartCodeAndNALUType(buffer, subsample_nalus[j]); diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc index 71d0f3c9bc39..766afae97b2b 100644 --- a/media/test/pipeline_integration_test.cc +++ b/media/test/pipeline_integration_test.cc @@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/memory/scoped_ptr.h" #include "base/stl_util.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "build/build_config.h" #include "media/base/cdm_callback_promise.h" @@ -566,7 +567,8 @@ class MockMediaSource { std::string codecs_param = mimetype_.substr(codecs_param_start, codecs_param_end - codecs_param_start); - Tokenize(codecs_param, ",", &codecs); + codecs = base::SplitString( + codecs_param, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); } CHECK_EQ(chunk_demuxer_->AddId(kSourceId, type, codecs), ChunkDemuxer::kOk); diff --git a/net/proxy/proxy_config_service_linux.cc b/net/proxy/proxy_config_service_linux.cc index de4d472fb133..c26c0e11eedb 100644 --- a/net/proxy/proxy_config_service_linux.cc +++ b/net/proxy/proxy_config_service_linux.cc @@ -29,6 +29,7 @@ #include "base/nix/xdg_util.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_tokenizer.h" #include "base/strings/string_util.h" #include "base/threading/thread_restrictions.h" @@ -836,10 +837,10 @@ bool SettingGetterImplGSettings::LoadAndCheckVersion( // need them now, and to figure out where to get them, we have to check // for this binary. See http://crbug.com/69057 for additional details. base::ThreadRestrictions::ScopedAllowIO allow_io; - std::vector paths; - Tokenize(path, ":", &paths); - for (size_t i = 0; i < paths.size(); ++i) { - base::FilePath file(paths[i]); + + for (const base::StringPiece& path_str : base::SplitStringPiece( + path, ":", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) { + base::FilePath file(path_str); if (base::PathExists(file.Append("gnome-network-properties"))) { VLOG(1) << "Found gnome-network-properties. Will fall back to gconf."; return false; diff --git a/net/server/http_server_request_info.cc b/net/server/http_server_request_info.cc index 23729b210046..df5cff6bc75a 100644 --- a/net/server/http_server_request_info.cc +++ b/net/server/http_server_request_info.cc @@ -4,6 +4,7 @@ #include "net/server/http_server_request_info.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" namespace net { @@ -28,12 +29,11 @@ bool HttpServerRequestInfo::HasHeaderValue( DCHECK_EQ(base::StringToLowerASCII(header_value), header_value); std::string complete_value = GetHeaderValue(header_name); base::StringToLowerASCII(&complete_value); - std::vector value_items; - Tokenize(complete_value, ",", &value_items); - for (std::vector::iterator it = value_items.begin(); - it != value_items.end(); ++it) { - base::TrimString(*it, " \t", &*it); - if (*it == header_value) + + for (const base::StringPiece& cur : + base::SplitString(complete_value, ",", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { + if (base::TrimString(cur, " \t", base::TRIM_ALL) == header_value) return true; } return false; diff --git a/net/tools/dump_cache/url_to_filename_encoder_unittest.cc b/net/tools/dump_cache/url_to_filename_encoder_unittest.cc index a1a96651da39..e4d866f38c19 100644 --- a/net/tools/dump_cache/url_to_filename_encoder_unittest.cc +++ b/net/tools/dump_cache/url_to_filename_encoder_unittest.cc @@ -7,6 +7,7 @@ #include #include +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/string_piece.h" @@ -32,11 +33,11 @@ class UrlToFilenameEncoderTest : public ::testing::Test { } void CheckSegmentLength(const StringPiece& escaped_word) { - std::vector components; - Tokenize(escaped_word, StringPiece("/"), &components); - for (size_t i = 0; i < components.size(); ++i) { + for (const base::StringPiece& component : + base::SplitStringPiece(escaped_word, "/", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { EXPECT_GE(UrlToFilenameEncoder::kMaximumSubdirectoryLength, - components[i].size()); + component.size()); } } diff --git a/net/tools/quic/quic_client_bin.cc b/net/tools/quic/quic_client_bin.cc index 3fc8be1e1e84..e14843e48c9e 100644 --- a/net/tools/quic/quic_client_bin.cc +++ b/net/tools/quic/quic_client_bin.cc @@ -234,11 +234,11 @@ int main(int argc, char *argv[]) { FLAGS_body.empty() ? "GET" : "POST", url.spec(), "HTTP/1.1"); // Append any additional headers supplied on the command line. - vector headers_tokenized; - Tokenize(FLAGS_headers, ";", &headers_tokenized); - for (size_t i = 0; i < headers_tokenized.size(); ++i) { + for (const std::string& header : + base::SplitString(FLAGS_headers, ";", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { string sp; - base::TrimWhitespaceASCII(headers_tokenized[i], base::TRIM_ALL, &sp); + base::TrimWhitespaceASCII(header, base::TRIM_ALL, &sp); if (sp.empty()) { continue; } diff --git a/net/tools/quic/quic_simple_client_bin.cc b/net/tools/quic/quic_simple_client_bin.cc index 824521def5f0..827e6854b581 100644 --- a/net/tools/quic/quic_simple_client_bin.cc +++ b/net/tools/quic/quic_simple_client_bin.cc @@ -234,11 +234,11 @@ int main(int argc, char *argv[]) { request.url = url; // Append any additional headers supplied on the command line. - vector headers_tokenized; - Tokenize(FLAGS_headers, ";", &headers_tokenized); - for (size_t i = 0; i < headers_tokenized.size(); ++i) { + for (const std::string& header : + base::SplitString(FLAGS_headers, ";", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { string sp; - base::TrimWhitespaceASCII(headers_tokenized[i], base::TRIM_ALL, &sp); + base::TrimWhitespaceASCII(header, base::TRIM_ALL, &sp); if (sp.empty()) { continue; } diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc index 5ca046fe9c15..fde6568d7391 100644 --- a/net/url_request/url_request_http_job_unittest.cc +++ b/net/url_request/url_request_http_job_unittest.cc @@ -10,6 +10,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/run_loop.h" +#include "base/strings/string_split.h" #include "net/base/auth.h" #include "net/base/request_priority.h" #include "net/http/http_transaction_factory.h" @@ -73,10 +74,10 @@ class URLRequestHttpJobTest : public ::testing::Test { // This check isn't wrapped with EXPECT* macros because different // results from this function may be expected in different tests. - std::vector tokens; - size_t num_tokens = Tokenize(encoding_headers, ", ", &tokens); - for (size_t i = 0; i < num_tokens; i++) { - if (!base::strncasecmp(tokens[i].data(), "sdch", tokens[i].length())) + for (const std::string& token : + base::SplitString(encoding_headers, ", ", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { + if (!base::strncasecmp(token.data(), "sdch", token.length())) return true; } return false; diff --git a/remoting/base/capabilities.cc b/remoting/base/capabilities.cc index 4e52ef86528e..122649298208 100644 --- a/remoting/base/capabilities.cc +++ b/remoting/base/capabilities.cc @@ -8,24 +8,28 @@ #include #include "base/stl_util.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" namespace remoting { bool HasCapability(const std::string& capabilities, const std::string& key) { - std::vector caps; - Tokenize(capabilities, " ", &caps); - return std::find(caps.begin(), caps.end(), key) != caps.end(); + std::vector caps = base::SplitStringPiece( + capabilities, " ", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + return std::find(caps.begin(), caps.end(), base::StringPiece(key)) != + caps.end(); } std::string IntersectCapabilities(const std::string& client_capabilities, const std::string& host_capabilities) { - std::vector client_caps; - Tokenize(client_capabilities, " ", &client_caps); + std::vector client_caps = base::SplitString( + client_capabilities, " ", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); std::sort(client_caps.begin(), client_caps.end()); - std::vector host_caps; - Tokenize(host_capabilities, " ", &host_caps); + std::vector host_caps = base::SplitString( + host_capabilities, " ", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); std::sort(host_caps.begin(), host_caps.end()); std::vector result = diff --git a/remoting/base/capabilities_unittest.cc b/remoting/base/capabilities_unittest.cc index 162c96d7f5c0..71dbd5641781 100644 --- a/remoting/base/capabilities_unittest.cc +++ b/remoting/base/capabilities_unittest.cc @@ -5,6 +5,7 @@ #include #include +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "remoting/base/capabilities.h" #include "testing/gtest/include/gtest/gtest.h" @@ -61,9 +62,9 @@ TEST(CapabilitiesTest, HasCapability) { // Verify that HasCapability(|capabilities|, |key|) returns |result|. // |result|. for (size_t i = 0; i < arraysize(data); ++i) { - std::vector caps; - Tokenize(data[i].capabilities, " ", &caps); - + std::vector caps = base::SplitString( + data[i].capabilities, " ", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); do { EXPECT_EQ(data[i].result, HasCapability(JoinString(caps, " "), data[i].key)); @@ -93,9 +94,8 @@ TEST(CapabilitiesTest, Intersect) { // Verify that intersection of |right| with all permutations of |left| yields // |result|. for (size_t i = 0; i < arraysize(data); ++i) { - std::vector caps; - Tokenize(data[i].left, " ", &caps); - + std::vector caps = base::SplitString( + data[i].left, " ", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); do { EXPECT_EQ(data[i].result, IntersectCapabilities(JoinString(caps, " "), data[i].right)); diff --git a/remoting/host/client_session_unittest.cc b/remoting/host/client_session_unittest.cc index 4ce6319612e8..696f83f6b911 100644 --- a/remoting/host/client_session_unittest.cc +++ b/remoting/host/client_session_unittest.cc @@ -8,6 +8,7 @@ #include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/test/test_simple_task_runner.h" #include "remoting/base/auto_thread_task_runner.h" @@ -100,10 +101,12 @@ MATCHER_P(EqCapabilities, expected_capabilities, "") { if (!arg.has_capabilities()) return false; - std::vector words_args; - std::vector words_expected; - Tokenize(arg.capabilities(), " ", &words_args); - Tokenize(expected_capabilities, " ", &words_expected); + std::vector words_args = base::SplitString( + arg.capabilities(), " ", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); + std::vector words_expected = base::SplitString( + expected_capabilities, " ", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); std::sort(words_args.begin(), words_args.end()); std::sort(words_expected.begin(), words_expected.end()); return words_args == words_expected; diff --git a/remoting/host/host_extension_session_manager_unittest.cc b/remoting/host/host_extension_session_manager_unittest.cc index 25e18c48d91f..5be438b9db70 100644 --- a/remoting/host/host_extension_session_manager_unittest.cc +++ b/remoting/host/host_extension_session_manager_unittest.cc @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "remoting/codec/video_encoder.h" #include "remoting/host/fake_host_extension.h" @@ -79,8 +80,9 @@ TEST_F(HostExtensionSessionManagerTest, ExtensionCapabilities_AreReported) { HostExtensionSessionManager extension_manager(extensions_, &client_session_control_); - std::vector reported_caps; - Tokenize(extension_manager.GetCapabilities(), " ", &reported_caps); + std::vector reported_caps = base::SplitString( + extension_manager.GetCapabilities(), " ", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); std::sort(reported_caps.begin(), reported_caps.end()); ASSERT_EQ(2U, reported_caps.size()); diff --git a/sync/test/fake_server/fake_server_entity.cc b/sync/test/fake_server/fake_server_entity.cc index 4dd84111d959..784eeb56f17d 100644 --- a/sync/test/fake_server/fake_server_entity.cc +++ b/sync/test/fake_server/fake_server_entity.cc @@ -14,6 +14,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "net/base/net_errors.h" @@ -81,11 +82,11 @@ std::string FakeServerEntity::GetTopLevelId(const ModelType& model_type) { // static ModelType FakeServerEntity::GetModelTypeFromId(const string& id) { - vector tokens; - size_t token_count = Tokenize(id, kIdSeparator, &tokens); + vector tokens = base::SplitStringPiece( + id, kIdSeparator, base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); int field_number; - if (token_count != 2 || !base::StringToInt(tokens[0], &field_number)) { + if (tokens.size() != 2 || !base::StringToInt(tokens[0], &field_number)) { return syncer::UNSPECIFIED; } diff --git a/ui/aura/window_tree_host_x11.cc b/ui/aura/window_tree_host_x11.cc index 65fbc49a85fd..8059d90bff23 100644 --- a/ui/aura/window_tree_host_x11.cc +++ b/ui/aura/window_tree_host_x11.cc @@ -20,6 +20,7 @@ #include "base/command_line.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/sys_info.h" @@ -115,10 +116,11 @@ class TouchEventCalibrate : public ui::PlatformEventObserver { TouchEventCalibrate() : left_(0), right_(0), top_(0), bottom_(0) { if (ui::PlatformEventSource::GetInstance()) ui::PlatformEventSource::GetInstance()->AddPlatformEventObserver(this); - std::vector parts; - if (Tokenize(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + std::vector parts = base::SplitString( + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( switches::kTouchCalibration), - ",", &parts) >= 4) { + ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (parts.size() >= 4) { if (!base::StringToInt(parts[0], &left_)) DLOG(ERROR) << "Incorrect left border calibration value passed."; if (!base::StringToInt(parts[1], &right_)) diff --git a/ui/base/dragdrop/os_exchange_data_provider_aurax11.cc b/ui/base/dragdrop/os_exchange_data_provider_aurax11.cc index c9285a02b18c..e7a815c43605 100644 --- a/ui/base/dragdrop/os_exchange_data_provider_aurax11.cc +++ b/ui/base/dragdrop/os_exchange_data_provider_aurax11.cc @@ -6,6 +6,7 @@ #include "base/logging.h" #include "base/memory/ref_counted_memory.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "net/base/filename_util.h" @@ -259,10 +260,11 @@ bool OSExchangeDataProviderAuraX11::GetURLAndTitle( base::string16 unparsed; data.AssignTo(&unparsed); - std::vector tokens; - size_t num_tokens = Tokenize(unparsed, base::ASCIIToUTF16("\n"), &tokens); - if (num_tokens > 0) { - if (num_tokens > 1) + std::vector tokens = base::SplitString( + unparsed, base::ASCIIToUTF16("\n"), + base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (tokens.size() > 0) { + if (tokens.size() > 1) *title = tokens[1]; else *title = base::string16(); diff --git a/ui/base/ime/chromeos/input_method_whitelist.cc b/ui/base/ime/chromeos/input_method_whitelist.cc index 568e91c3953e..8086ef914467 100644 --- a/ui/base/ime/chromeos/input_method_whitelist.cc +++ b/ui/base/ime/chromeos/input_method_whitelist.cc @@ -6,6 +6,7 @@ #include +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "chromeos/ime/input_methods.h" #include "ui/base/ime/chromeos/extension_ime_util.h" @@ -38,8 +39,9 @@ InputMethodWhitelist::GetSupportedInputMethods() const { std::vector layouts; layouts.push_back(kInputMethods[i].xkb_layout_id); - std::vector languages; - Tokenize(kInputMethods[i].language_code, kLanguageDelimiter, &languages); + std::vector languages = base::SplitString( + kInputMethods[i].language_code, kLanguageDelimiter, + base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); DCHECK(!languages.empty()); input_methods->push_back(InputMethodDescriptor( diff --git a/ui/base/x/selection_utils.cc b/ui/base/x/selection_utils.cc index d5ce1c03cf28..cc9afbed95c5 100644 --- a/ui/base/x/selection_utils.cc +++ b/ui/base/x/selection_utils.cc @@ -8,6 +8,7 @@ #include "base/i18n/icu_string_conversions.h" #include "base/logging.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "ui/base/clipboard/clipboard.h" @@ -79,10 +80,8 @@ std::vector ParseURIList(const SelectionData& data) { // uri-lists are newline separated file lists in URL encoding. std::string unparsed; data.AssignTo(&unparsed); - - std::vector tokens; - Tokenize(unparsed, "\n", &tokens); - return tokens; + return base::SplitString( + unparsed, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); } std::string RefCountedMemoryToString( diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.cc b/ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.cc index 3adb35803cb8..45cd381677d5 100644 --- a/ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.cc +++ b/ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.cc @@ -721,7 +721,8 @@ struct ConfigurationSection { MatchCriteria::MatchCriteria(const std::string& arg) { // TODO(sheckylin): Should we trim all tokens here? - Tokenize(arg, "|", &args_); + args_ = base::SplitString( + arg, "|", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); if (args_.empty()) { LOG(ERROR) << "Empty match pattern found, will evaluate to the default " "value (true): \"" << arg << "\""; diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/ui/events/ozone/evdev/touch_event_converter_evdev.cc index 75962426c63c..4a46de3e8bb3 100644 --- a/ui/events/ozone/evdev/touch_event_converter_evdev.cc +++ b/ui/events/ozone/evdev/touch_event_converter_evdev.cc @@ -21,6 +21,7 @@ #include "base/memory/scoped_vector.h" #include "base/message_loop/message_loop.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/trace_event/trace_event.h" @@ -48,10 +49,11 @@ struct TouchCalibration { }; void GetTouchCalibration(TouchCalibration* cal) { - std::vector parts; - if (Tokenize(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kTouchCalibration), - ",", &parts) >= 4) { + std::vector parts = base::SplitString( + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kTouchCalibration), + ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (parts.size() >= 4) { if (!base::StringToInt(parts[0], &cal->bezel_left)) LOG(ERROR) << "Incorrect left border calibration value passed."; if (!base::StringToInt(parts[1], &cal->bezel_right)) diff --git a/ui/gl/gl_egl_api_implementation.cc b/ui/gl/gl_egl_api_implementation.cc index 792fdc5e714d..cfdd026e7f55 100644 --- a/ui/gl/gl_egl_api_implementation.cc +++ b/ui/gl/gl_egl_api_implementation.cc @@ -11,13 +11,14 @@ #include "ui/gl/gl_implementation.h" namespace { + std::string FilterExtensionList( const char* extensions, const std::vector& disabled_extensions) { if (extensions == NULL) return ""; - std::vector extension_vec; - base::SplitString(extensions, ' ', &extension_vec); + std::vector extension_vec = base::SplitString( + extensions, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); extension_vec.erase(std::remove_if( extension_vec.begin(), extension_vec.end(), [&disabled_extensions](const std::string& ext) { @@ -26,7 +27,8 @@ std::string FilterExtensionList( }), extension_vec.end()); return JoinString(extension_vec, " "); } -} + +} // namespace namespace gfx { @@ -92,7 +94,9 @@ void RealEGLApi::InitializeWithCommandLine(DriverEGL* driver, disabled_exts_.clear(); filtered_exts_.clear(); if (!disabled_extensions.empty()) { - Tokenize(disabled_extensions, ", ;", &disabled_exts_); + disabled_exts_ = base::SplitString( + disabled_extensions, ", ;", + base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); } } diff --git a/ui/gl/gl_gl_api_implementation.cc b/ui/gl/gl_gl_api_implementation.cc index a8d4dbe0c0de..1d6fcb15d0a5 100644 --- a/ui/gl/gl_gl_api_implementation.cc +++ b/ui/gl/gl_gl_api_implementation.cc @@ -417,7 +417,9 @@ void RealGLApi::InitializeWithCommandLine(DriverGL* driver, const std::string disabled_extensions = command_line->GetSwitchValueASCII( switches::kDisableGLExtensions); if (!disabled_extensions.empty()) { - Tokenize(disabled_extensions, ", ;", &disabled_exts_); + disabled_exts_ = base::SplitString( + disabled_extensions, ", ;", + base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); } } @@ -466,8 +468,10 @@ void RealGLApi::InitializeFilteredExtensions() { gfx::kGLImplementationDesktopGLCoreProfile) { const char* gl_extensions = reinterpret_cast( GLApiBase::glGetStringFn(GL_EXTENSIONS)); - if (gl_extensions) - base::SplitString(gl_extensions, ' ', &filtered_exts_); + if (gl_extensions) { + filtered_exts_ = base::SplitString( + gl_extensions, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + } } else { GLint num_extensions = 0; GLApiBase::glGetIntegervFn(GL_NUM_EXTENSIONS, &num_extensions); @@ -515,8 +519,8 @@ void VirtualGLApi::Initialize(DriverGL* driver, GLContext* real_context) { DCHECK(real_context->IsCurrent(NULL)); std::string ext_string = real_context->GetExtensions(); - std::vector ext; - Tokenize(ext_string, " ", &ext); + std::vector ext = base::SplitString( + ext_string, " ", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); std::vector::iterator it; // We can't support GL_EXT_occlusion_query_boolean which is diff --git a/win8/metro_driver/file_picker.cc b/win8/metro_driver/file_picker.cc index 1ccfbb93c0e8..b41e6be01d49 100644 --- a/win8/metro_driver/file_picker.cc +++ b/win8/metro_driver/file_picker.cc @@ -305,9 +305,8 @@ HRESULT OpenFilePickerSession::StartFilePicker() { break; // There can be a single extension, or a list of semicolon-separated ones. - std::vector extensions_win32_style; - size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); - DCHECK_EQ(extension_count, extensions_win32_style.size()); + std::vector extensions_win32_style = base::SplitString( + walk, L";", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); // Metro wants suffixes only, not patterns. mswrw::HString extension; @@ -476,9 +475,8 @@ HRESULT SaveFilePickerSession::StartFilePicker() { break; // There can be a single extension, or a list of semicolon-separated ones. - std::vector extensions_win32_style; - size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); - DCHECK_EQ(extension_count, extensions_win32_style.size()); + std::vector extensions_win32_style = base::SplitString( + walk, L";", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); // Metro wants suffixes only, not patterns. Also, metro does not support // the all files ("*") pattern in the save picker. diff --git a/win8/metro_driver/file_picker_ash.cc b/win8/metro_driver/file_picker_ash.cc index e45301c7f8ef..a420b53a4406 100644 --- a/win8/metro_driver/file_picker_ash.cc +++ b/win8/metro_driver/file_picker_ash.cc @@ -8,6 +8,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/message_loop/message_loop.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/synchronization/waitable_event.h" #include "base/win/metro.h" @@ -239,9 +240,8 @@ HRESULT OpenFilePickerSession::StartFilePicker() { break; // There can be a single extension, or a list of semicolon-separated ones. - std::vector extensions_win32_style; - size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); - DCHECK_EQ(extension_count, extensions_win32_style.size()); + std::vector extensions_win32_style = base::SplitString( + walk, L";", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); // Metro wants suffixes only, not patterns. mswrw::HString extension; @@ -421,9 +421,8 @@ HRESULT SaveFilePickerSession::StartFilePicker() { break; // There can be a single extension, or a list of semicolon-separated ones. - std::vector extensions_win32_style; - size_t extension_count = Tokenize(walk, L";", &extensions_win32_style); - DCHECK_EQ(extension_count, extensions_win32_style.size()); + std::vector extensions_win32_style = base::SplitString( + walk, L";", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); // Metro wants suffixes only, not patterns. Also, metro does not support // the all files ("*") pattern in the save picker. -- 2.11.4.GIT