From eb2cef413dd2447fe3112dd54ab02abf479c54fc Mon Sep 17 00:00:00 2001 From: John McCutchan Date: Thu, 16 Jul 2015 07:30:56 -0700 Subject: [PATCH] Port more String and HashMap usages BUG= R=abarth@chromium.org Review URL: https://codereview.chromium.org/1237973004 . --- engine/core/script/dart_controller.cc | 2 +- engine/tonic/dart_exception_factory.cc | 102 +++++++++++++++++--- engine/tonic/dart_exception_factory.h | 9 +- engine/tonic/dart_library_loader.cc | 42 ++++---- engine/tonic/dart_library_loader.h | 9 +- engine/tonic/dart_library_provider.h | 5 +- engine/tonic/dart_snapshot_loader.h | 1 - shell/dart/dart_library_provider_files.cc | 4 +- shell/dart/dart_library_provider_files.h | 2 +- shell/dart/dart_library_provider_network.cc | 8 +- shell/dart/dart_library_provider_network.h | 2 +- 11 files changed, 137 insertions(+), 49 deletions(-) diff --git a/engine/core/script/dart_controller.cc b/engine/core/script/dart_controller.cc index a51eec9b9ab..cf12e38f7d3 100644 --- a/engine/core/script/dart_controller.cc +++ b/engine/core/script/dart_controller.cc @@ -115,7 +115,7 @@ void DartController::RunFromLibrary(const String& name, loader.set_library_provider(library_provider); DartDependencyCatcher dependency_catcher(loader); - loader.LoadLibrary(name); + loader.LoadLibrary(name.toUTF8()); loader.WaitForDependencies(dependency_catcher.dependencies(), base::Bind(&DartController::DidLoadMainLibrary, weak_factory_.GetWeakPtr(), name)); diff --git a/engine/tonic/dart_exception_factory.cc b/engine/tonic/dart_exception_factory.cc index e439a45393c..5742a1a0b6c 100644 --- a/engine/tonic/dart_exception_factory.cc +++ b/engine/tonic/dart_exception_factory.cc @@ -6,10 +6,84 @@ #include "sky/engine/tonic/dart_converter.h" #include "sky/engine/tonic/dart_builtin.h" -#include "sky/engine/wtf/text/StringBuilder.h" namespace blink { +// TODO(johnmccutchan): Move this into another file. +class StdStringBuilder { + public: + StdStringBuilder() { + } + + void Append(const char* s, intptr_t length) { + if (s == NULL) { + return; + } + for (intptr_t i = 0; i < length; i++) { + buffer_.push_back(s[i]); + } + } + + void Append(const char* s) { + if (s == NULL) { + return; + } + for (intptr_t i = 0; s[i] != '\0'; i++) { + buffer_.push_back(s[i]); + } + } + + void Append(char ch) { + buffer_.push_back(ch); + } + + void Append(std::string s) { + if (s.length() == 0) { + return; + } + const char* c_str = s.data(); + intptr_t c_str_length = s.size(); + Append(c_str, c_str_length); + } + + void AppendNumber(int num) { + Append(std::to_string(num)); + } + + void Clear() { + buffer_.resize(0); + } + + void ShrinkToFit() { + buffer_.shrink_to_fit(); + } + + void Reserve(intptr_t capacity) { + buffer_.reserve(capacity); + } + + std::string ToString() { + return std::string(buffer_.data(), buffer_.size()); + } + + const char* data() const { + return buffer_.data(); + } + + char* data() { + return buffer_.data(); + } + + intptr_t size() const { + return buffer_.size(); + } + + private: + std::vector buffer_; + + DISALLOW_COPY_AND_ASSIGN(StdStringBuilder); +}; + DartExceptionFactory::DartExceptionFactory(DartState* dart_state) : dart_state_(dart_state) { } @@ -18,24 +92,30 @@ DartExceptionFactory::~DartExceptionFactory() { } Dart_Handle DartExceptionFactory::CreateNullArgumentException(int index) { - StringBuilder message; - message.appendLiteral("Argument "); - message.appendNumber(index); - message.appendLiteral(" cannot be null."); - return CreateException("ArgumentError", message.toString()); + StdStringBuilder builder; + builder.Append("Argument "); + builder.AppendNumber(index); + builder.Append(" cannot be null."); + Dart_Handle message_handle = Dart_NewStringFromUTF8( + reinterpret_cast(builder.data()), builder.size()); + return CreateException("ArgumentError", message_handle); } -Dart_Handle DartExceptionFactory::CreateException(const String& class_name, - const String& message) { +Dart_Handle DartExceptionFactory::CreateException(const std::string& class_name, + const std::string& message) { + return CreateException(class_name, StdStringToDart(message)); +} + +Dart_Handle DartExceptionFactory::CreateException(const std::string& class_name, + Dart_Handle message) { if (core_library_.is_empty()) { Dart_Handle library = DartBuiltin::LookupLibrary("dart:core"); core_library_.Set(dart_state_, library); } Dart_Handle exception_class = Dart_GetType( - core_library_.value(), StringToDart(dart_state_, class_name), 0, 0); - Dart_Handle message_handle = StringToDart(dart_state_, message); - return Dart_New(exception_class, Dart_EmptyString(), 1, &message_handle); + core_library_.value(), StdStringToDart(class_name), 0, 0); + return Dart_New(exception_class, Dart_EmptyString(), 1, &message); } } // namespace blink diff --git a/engine/tonic/dart_exception_factory.h b/engine/tonic/dart_exception_factory.h index 155eeb5cc65..ecc8ec01b7d 100644 --- a/engine/tonic/dart_exception_factory.h +++ b/engine/tonic/dart_exception_factory.h @@ -5,9 +5,11 @@ #ifndef SKY_ENGINE_TONIC_DART_EXCEPTION_FACTORY_H_ #define SKY_ENGINE_TONIC_DART_EXCEPTION_FACTORY_H_ +#include +#include + #include "dart/runtime/include/dart_api.h" #include "sky/engine/tonic/dart_persistent_value.h" -#include "sky/engine/wtf/text/WTFString.h" namespace blink { class DartState; @@ -18,7 +20,10 @@ class DartExceptionFactory { ~DartExceptionFactory(); Dart_Handle CreateNullArgumentException(int index); - Dart_Handle CreateException(const String& class_name, const String& message); + Dart_Handle CreateException(const std::string& class_name, + const std::string& message); + Dart_Handle CreateException(const std::string& class_name, + Dart_Handle message); private: DartState* dart_state_; diff --git a/engine/tonic/dart_library_loader.cc b/engine/tonic/dart_library_loader.cc index 6e9525eefa5..ac7228e66c2 100644 --- a/engine/tonic/dart_library_loader.cc +++ b/engine/tonic/dart_library_loader.cc @@ -26,13 +26,13 @@ namespace blink { class DartLibraryLoader::Job : public DartDependency, public DataPipeDrainer::Client { public: - Job(DartLibraryLoader* loader, const String& name) + Job(DartLibraryLoader* loader, const std::string& name) : loader_(loader), name_(name), weak_factory_(this) { loader->library_provider()->GetLibraryAsStream( name, base::Bind(&Job::OnStreamAvailable, weak_factory_.GetWeakPtr())); } - const String& name() const { return name_; } + const std::string& name() const { return name_; } protected: DartLibraryLoader* loader_; @@ -55,7 +55,7 @@ class DartLibraryLoader::Job : public DartDependency, } // Subclasses must implement OnDataComplete. - String name_; + std::string name_; OwnPtr drainer_; base::WeakPtrFactory weak_factory_; @@ -63,9 +63,9 @@ class DartLibraryLoader::Job : public DartDependency, class DartLibraryLoader::ImportJob : public Job { public: - ImportJob(DartLibraryLoader* loader, const String& name) : Job(loader, name) { + ImportJob(DartLibraryLoader* loader, const std::string& name) : Job(loader, name) { TRACE_EVENT_ASYNC_BEGIN1("sky", "DartLibraryLoader::ImportJob", this, "url", - name.ascii().toStdString()); + name); } private: @@ -78,10 +78,10 @@ class DartLibraryLoader::ImportJob : public Job { class DartLibraryLoader::SourceJob : public Job { public: - SourceJob(DartLibraryLoader* loader, const String& name, Dart_Handle library) + SourceJob(DartLibraryLoader* loader, const std::string& name, Dart_Handle library) : Job(loader, name), library_(loader->dart_state(), library) { TRACE_EVENT_ASYNC_BEGIN1("sky", "DartLibraryLoader::SourceJob", this, "url", - name.ascii().toStdString()); + name); } Dart_PersistentHandle library() const { return library_.value(); } @@ -207,24 +207,26 @@ void DartLibraryLoader::WaitForDependencies( adoptPtr(new DependencyWatcher(dependencies, callback))); } -void DartLibraryLoader::LoadLibrary(const String& name) { - const auto& result = pending_libraries_.add(name, nullptr); - if (result.isNewEntry) { +void DartLibraryLoader::LoadLibrary(const std::string& name) { + const auto& result = pending_libraries_.insert(std::make_pair(name, nullptr)); + if (result.second) { + // New entry. OwnPtr job = adoptPtr(new ImportJob(this, name)); - result.storedValue->value = job.get(); + result.first->second = job.get(); jobs_.add(job.release()); } if (dependency_catcher_) - dependency_catcher_->AddDependency(result.storedValue->value); + dependency_catcher_->AddDependency(result.first->second); } Dart_Handle DartLibraryLoader::Import(Dart_Handle library, Dart_Handle url) { - LoadLibrary(StringFromDart(url)); + LoadLibrary(StdStringFromDart(url)); return Dart_True(); } Dart_Handle DartLibraryLoader::Source(Dart_Handle library, Dart_Handle url) { - OwnPtr job = adoptPtr(new SourceJob(this, StringFromDart(url), library)); + OwnPtr job = + adoptPtr(new SourceJob(this, StdStringFromDart(url), library)); if (dependency_catcher_) dependency_catcher_->AddDependency(job.get()); jobs_.add(job.release()); @@ -245,14 +247,14 @@ void DartLibraryLoader::DidCompleteImportJob( WatcherSignaler watcher_signaler(*this, job); Dart_Handle result = Dart_LoadLibrary( - StringToDart(dart_state_, job->name()), + StdStringToDart(job->name()), Dart_NewStringFromUTF8(buffer.data(), buffer.size()), 0, 0); if (Dart_IsError(result)) { - LOG(ERROR) << "Error Loading " << job->name().utf8().data() << " " + LOG(ERROR) << "Error Loading " << job->name() << " " << Dart_GetError(result); } - pending_libraries_.remove(job->name()); + pending_libraries_.erase(job->name()); jobs_.remove(job); } @@ -266,11 +268,11 @@ void DartLibraryLoader::DidCompleteSourceJob( Dart_Handle result = Dart_LoadSource( Dart_HandleFromPersistent(job->library()), - StringToDart(dart_state_, job->name()), + StdStringToDart(job->name()), Dart_NewStringFromUTF8(buffer.data(), buffer.size()), 0, 0); if (Dart_IsError(result)) { - LOG(ERROR) << "Error Loading " << job->name().utf8().data() << " " + LOG(ERROR) << "Error Loading " << job->name() << " " << Dart_GetError(result); } @@ -283,7 +285,7 @@ void DartLibraryLoader::DidFailJob(Job* job) { WatcherSignaler watcher_signaler(*this, job); - LOG(ERROR) << "Library Load failed: " << job->name().utf8().data(); + LOG(ERROR) << "Library Load failed: " << job->name(); // TODO(eseidel): Call Dart_LibraryHandleError in the SourceJob case? jobs_.remove(job); diff --git a/engine/tonic/dart_library_loader.h b/engine/tonic/dart_library_loader.h index da962d9cded..60973407022 100644 --- a/engine/tonic/dart_library_loader.h +++ b/engine/tonic/dart_library_loader.h @@ -5,15 +5,16 @@ #ifndef SKY_ENGINE_TONIC_DART_LIBRARY_LOADER_H_ #define SKY_ENGINE_TONIC_DART_LIBRARY_LOADER_H_ +#include +#include #include + #include "base/callback_forward.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "dart/runtime/include/dart_api.h" -#include "sky/engine/wtf/HashMap.h" #include "sky/engine/wtf/HashSet.h" #include "sky/engine/wtf/OwnPtr.h" -#include "sky/engine/wtf/text/WTFString.h" namespace blink { class DartDependency; @@ -35,7 +36,7 @@ class DartLibraryLoader { Dart_Handle library, Dart_Handle url); - void LoadLibrary(const String& name); + void LoadLibrary(const std::string& name); void WaitForDependencies(const HashSet& dependencies, const base::Closure& callback); @@ -70,7 +71,7 @@ class DartLibraryLoader { DartState* dart_state_; DartLibraryProvider* library_provider_; - HashMap pending_libraries_; + std::unordered_map pending_libraries_; HashSet> jobs_; HashSet> dependency_watchers_; DartDependencyCatcher* dependency_catcher_; diff --git a/engine/tonic/dart_library_provider.h b/engine/tonic/dart_library_provider.h index e849fdc0473..eef3c659d5d 100644 --- a/engine/tonic/dart_library_provider.h +++ b/engine/tonic/dart_library_provider.h @@ -5,10 +5,11 @@ #ifndef SKY_ENGINE_TONIC_DART_LIBRARY_PROVIDER_H_ #define SKY_ENGINE_TONIC_DART_LIBRARY_PROVIDER_H_ +#include + #include "base/callback.h" #include "dart/runtime/include/dart_api.h" #include "mojo/public/cpp/system/data_pipe.h" -#include "sky/engine/wtf/text/WTFString.h" namespace blink { @@ -17,7 +18,7 @@ typedef base::Callback class DartLibraryProvider { public: - virtual void GetLibraryAsStream(const String& name, + virtual void GetLibraryAsStream(const std::string& name, DataPipeConsumerCallback callback) = 0; virtual Dart_Handle CanonicalizeURL(Dart_Handle library, Dart_Handle url) = 0; diff --git a/engine/tonic/dart_snapshot_loader.h b/engine/tonic/dart_snapshot_loader.h index 7817665cdae..b8d4a3c9327 100644 --- a/engine/tonic/dart_snapshot_loader.h +++ b/engine/tonic/dart_snapshot_loader.h @@ -13,7 +13,6 @@ #include "dart/runtime/include/dart_api.h" #include "mojo/common/data_pipe_drainer.h" #include "sky/engine/wtf/OwnPtr.h" -#include "sky/engine/wtf/text/WTFString.h" namespace blink { class DartState; diff --git a/shell/dart/dart_library_provider_files.cc b/shell/dart/dart_library_provider_files.cc index 4c0e267ae0e..2bed8e8e9e3 100644 --- a/shell/dart/dart_library_provider_files.cc +++ b/shell/dart/dart_library_provider_files.cc @@ -50,12 +50,12 @@ DartLibraryProviderFiles::~DartLibraryProviderFiles() { } void DartLibraryProviderFiles::GetLibraryAsStream( - const String& name, + const std::string& name, blink::DataPipeConsumerCallback callback) { mojo::DataPipe pipe; callback.Run(pipe.consumer_handle.Pass()); - base::FilePath source(name.toUTF8()); + base::FilePath source(name); scoped_refptr runner = base::WorkerPool::GetTaskRunner(true); mojo::common::CopyFromFile(source, pipe.producer_handle.Pass(), 0, diff --git a/shell/dart/dart_library_provider_files.h b/shell/dart/dart_library_provider_files.h index 6a3c46cc510..b62751b9fa2 100644 --- a/shell/dart/dart_library_provider_files.h +++ b/shell/dart/dart_library_provider_files.h @@ -18,7 +18,7 @@ class DartLibraryProviderFiles : public blink::DartLibraryProvider { protected: // |DartLibraryProvider| implementation: - void GetLibraryAsStream(const String& name, + void GetLibraryAsStream(const std::string& name, blink::DataPipeConsumerCallback callback) override; Dart_Handle CanonicalizeURL(Dart_Handle library, Dart_Handle url) override; diff --git a/shell/dart/dart_library_provider_network.cc b/shell/dart/dart_library_provider_network.cc index 8138e049e43..f91cac0b122 100644 --- a/shell/dart/dart_library_provider_network.cc +++ b/shell/dart/dart_library_provider_network.cc @@ -14,13 +14,13 @@ namespace shell { namespace { mojo::URLLoaderPtr Fetch(mojo::NetworkService* network_service, - const String& url, + const std::string& url, base::Callback callback) { mojo::URLLoaderPtr loader; network_service->CreateURLLoader(GetProxy(&loader)); mojo::URLRequestPtr request = mojo::URLRequest::New(); - request->url = url.toUTF8(); + request->url = url; request->auto_follow_redirects = true; loader->Start(request.Pass(), callback); @@ -32,7 +32,7 @@ mojo::URLLoaderPtr Fetch(mojo::NetworkService* network_service, class DartLibraryProviderNetwork::Job { public: Job(DartLibraryProviderNetwork* provider, - const String& name, + const std::string& name, blink::DataPipeConsumerCallback callback) : provider_(provider), callback_(callback), weak_factory_(this) { url_loader_ = @@ -66,7 +66,7 @@ DartLibraryProviderNetwork::~DartLibraryProviderNetwork() { } void DartLibraryProviderNetwork::GetLibraryAsStream( - const String& name, + const std::string& name, blink::DataPipeConsumerCallback callback) { jobs_.add(adoptPtr(new Job(this, name, callback))); } diff --git a/shell/dart/dart_library_provider_network.h b/shell/dart/dart_library_provider_network.h index b1f0add5859..e68a259db8f 100644 --- a/shell/dart/dart_library_provider_network.h +++ b/shell/dart/dart_library_provider_network.h @@ -22,7 +22,7 @@ class DartLibraryProviderNetwork : public blink::DartLibraryProvider { protected: // |DartLibraryProvider| implementation: - void GetLibraryAsStream(const String& name, + void GetLibraryAsStream(const std::string& name, blink::DataPipeConsumerCallback callback) override; Dart_Handle CanonicalizeURL(Dart_Handle library, Dart_Handle url) override;