mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Port more String and HashMap usages
BUG= R=abarth@chromium.org Review URL: https://codereview.chromium.org/1237973004 .
This commit is contained in:
parent
3fff8ce303
commit
eb2cef413d
@ -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));
|
||||
|
||||
@ -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<char> 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<const uint8_t*>(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
|
||||
|
||||
@ -5,9 +5,11 @@
|
||||
#ifndef SKY_ENGINE_TONIC_DART_EXCEPTION_FACTORY_H_
|
||||
#define SKY_ENGINE_TONIC_DART_EXCEPTION_FACTORY_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#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_;
|
||||
|
||||
@ -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<DataPipeDrainer> drainer_;
|
||||
|
||||
base::WeakPtrFactory<Job> 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> 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> job = adoptPtr(new SourceJob(this, StringFromDart(url), library));
|
||||
OwnPtr<Job> 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);
|
||||
|
||||
@ -5,15 +5,16 @@
|
||||
#ifndef SKY_ENGINE_TONIC_DART_LIBRARY_LOADER_H_
|
||||
#define SKY_ENGINE_TONIC_DART_LIBRARY_LOADER_H_
|
||||
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#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<DartDependency*>& dependencies,
|
||||
const base::Closure& callback);
|
||||
@ -70,7 +71,7 @@ class DartLibraryLoader {
|
||||
|
||||
DartState* dart_state_;
|
||||
DartLibraryProvider* library_provider_;
|
||||
HashMap<String, Job*> pending_libraries_;
|
||||
std::unordered_map<std::string, Job*> pending_libraries_;
|
||||
HashSet<OwnPtr<Job>> jobs_;
|
||||
HashSet<OwnPtr<DependencyWatcher>> dependency_watchers_;
|
||||
DartDependencyCatcher* dependency_catcher_;
|
||||
|
||||
@ -5,10 +5,11 @@
|
||||
#ifndef SKY_ENGINE_TONIC_DART_LIBRARY_PROVIDER_H_
|
||||
#define SKY_ENGINE_TONIC_DART_LIBRARY_PROVIDER_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
#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<void(mojo::ScopedDataPipeConsumerHandle)>
|
||||
|
||||
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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<base::TaskRunner> runner =
|
||||
base::WorkerPool::GetTaskRunner(true);
|
||||
mojo::common::CopyFromFile(source, pipe.producer_handle.Pass(), 0,
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -14,13 +14,13 @@ namespace shell {
|
||||
namespace {
|
||||
|
||||
mojo::URLLoaderPtr Fetch(mojo::NetworkService* network_service,
|
||||
const String& url,
|
||||
const std::string& url,
|
||||
base::Callback<void(mojo::URLResponsePtr)> 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)));
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user