| Index: components/web_view/frame.cc
|
| diff --git a/components/web_view/frame.cc b/components/web_view/frame.cc
|
| index 0670977c375c838b7756bbb99919b45bdb0b9f2e..9ab6eb7d3a493325a03acd5d7c04f1a66fe735b1 100644
|
| --- a/components/web_view/frame.cc
|
| +++ b/components/web_view/frame.cc
|
| @@ -96,7 +96,8 @@ Frame::~Frame() {
|
|
|
| void Frame::Init(Frame* parent,
|
| mojo::ViewTreeClientPtr view_tree_client,
|
| - mojo::InterfaceRequest<mojom::Frame> frame_request) {
|
| + mojo::InterfaceRequest<mojom::Frame> frame_request,
|
| + base::TimeTicks navigation_start_time) {
|
| {
|
| // Set the FrameClient to null so that we don't notify the client of the
|
| // add before OnConnect().
|
| @@ -110,7 +111,7 @@ void Frame::Init(Frame* parent,
|
| ? ClientType::NEW_CHILD_FRAME
|
| : ClientType::EXISTING_FRAME_NEW_APP;
|
| InitClient(client_type, nullptr, view_tree_client.Pass(),
|
| - frame_request.Pass());
|
| + frame_request.Pass(), navigation_start_time);
|
|
|
| tree_->delegate_->DidCreateFrame(this);
|
|
|
| @@ -185,7 +186,8 @@ void Frame::StopHighlightingFindResults() {
|
| void Frame::InitClient(ClientType client_type,
|
| scoped_ptr<FrameUserDataAndBinding> data_and_binding,
|
| mojo::ViewTreeClientPtr view_tree_client,
|
| - mojo::InterfaceRequest<mojom::Frame> frame_request) {
|
| + mojo::InterfaceRequest<mojom::Frame> frame_request,
|
| + base::TimeTicks navigation_start_time) {
|
| if (client_type == ClientType::EXISTING_FRAME_NEW_APP &&
|
| view_tree_client.get()) {
|
| embedded_connection_id_ = kInvalidConnectionId;
|
| @@ -205,6 +207,7 @@ void Frame::InitClient(ClientType client_type,
|
| frame_client_->OnConnect(
|
| nullptr, tree_->change_id(), id_, mojom::VIEW_CONNECT_TYPE_USE_NEW,
|
| mojo::Array<mojom::FrameDataPtr>(),
|
| + navigation_start_time.ToInternalValue(),
|
| base::Bind(&OnConnectAck, base::Passed(&data_and_binding)));
|
| } else {
|
| std::vector<const Frame*> frames;
|
| @@ -224,7 +227,7 @@ void Frame::InitClient(ClientType client_type,
|
| client_type == ClientType::EXISTING_FRAME_SAME_APP
|
| ? mojom::VIEW_CONNECT_TYPE_USE_EXISTING
|
| : mojom::VIEW_CONNECT_TYPE_USE_NEW,
|
| - array.Pass(),
|
| + array.Pass(), navigation_start_time.ToInternalValue(),
|
| base::Bind(&OnConnectAck, base::Passed(&data_and_binding)));
|
| tree_->delegate_->DidStartNavigation(this);
|
|
|
| @@ -243,7 +246,8 @@ void Frame::OnConnectAck(scoped_ptr<FrameUserDataAndBinding> data_and_binding) {
|
| void Frame::ChangeClient(mojom::FrameClient* frame_client,
|
| scoped_ptr<FrameUserData> user_data,
|
| mojo::ViewTreeClientPtr view_tree_client,
|
| - uint32_t app_id) {
|
| + uint32_t app_id,
|
| + base::TimeTicks navigation_start_time) {
|
| while (!children_.empty())
|
| delete children_[0];
|
|
|
| @@ -268,7 +272,7 @@ void Frame::ChangeClient(mojom::FrameClient* frame_client,
|
| app_id_ = app_id;
|
|
|
| InitClient(client_type, data_and_binding.Pass(), view_tree_client.Pass(),
|
| - nullptr);
|
| + nullptr, navigation_start_time);
|
| }
|
|
|
| void Frame::OnEmbedAck(bool success, mus::ConnectionSpecificId connection_id) {
|
| @@ -281,11 +285,13 @@ void Frame::OnEmbedAck(bool success, mus::ConnectionSpecificId connection_id) {
|
| void Frame::OnWillNavigateAck(mojom::FrameClient* frame_client,
|
| scoped_ptr<FrameUserData> user_data,
|
| mojo::ViewTreeClientPtr view_tree_client,
|
| - uint32 app_id) {
|
| + uint32 app_id,
|
| + base::TimeTicks navigation_start_time) {
|
| DCHECK(waiting_for_on_will_navigate_ack_);
|
| DVLOG(2) << "Frame::OnWillNavigateAck id=" << id_;
|
| waiting_for_on_will_navigate_ack_ = false;
|
| - ChangeClient(frame_client, user_data.Pass(), view_tree_client.Pass(), app_id);
|
| + ChangeClient(frame_client, user_data.Pass(), view_tree_client.Pass(), app_id,
|
| + navigation_start_time);
|
| if (pending_navigate_.get())
|
| StartNavigate(pending_navigate_.Pass());
|
| }
|
| @@ -348,13 +354,16 @@ void Frame::StartNavigate(mojo::URLRequestPtr request) {
|
| DVLOG(2) << "Frame::StartNavigate id=" << id_ << " url=" << request->url;
|
|
|
| const GURL requested_url(request->url);
|
| + base::TimeTicks navigation_start_time =
|
| + base::TimeTicks::FromInternalValue(request->originating_time_ticks);
|
| tree_->delegate_->CanNavigateFrame(
|
| - this, request.Pass(),
|
| - base::Bind(&Frame::OnCanNavigateFrame,
|
| - navigate_weak_ptr_factory_.GetWeakPtr(), requested_url));
|
| + this, request.Pass(), base::Bind(&Frame::OnCanNavigateFrame,
|
| + navigate_weak_ptr_factory_.GetWeakPtr(),
|
| + requested_url, navigation_start_time));
|
| }
|
|
|
| void Frame::OnCanNavigateFrame(const GURL& url,
|
| + base::TimeTicks navigation_start_time,
|
| uint32_t app_id,
|
| mojom::FrameClient* frame_client,
|
| scoped_ptr<FrameUserData> user_data,
|
| @@ -367,14 +376,17 @@ void Frame::OnCanNavigateFrame(const GURL& url,
|
| // and ends up reusing it).
|
| DCHECK(!view_tree_client.get());
|
| ChangeClient(frame_client, user_data.Pass(), view_tree_client.Pass(),
|
| - app_id);
|
| + app_id, navigation_start_time);
|
| } else {
|
| waiting_for_on_will_navigate_ack_ = true;
|
| DCHECK(view_tree_client.get());
|
| // TODO(sky): url isn't correct here, it should be a security origin.
|
| - frame_client_->OnWillNavigate(url.spec(), base::Bind(
|
| - &Frame::OnWillNavigateAck, base::Unretained(this), frame_client,
|
| - base::Passed(&user_data), base::Passed(&view_tree_client), app_id));
|
| + frame_client_->OnWillNavigate(
|
| + url.spec(),
|
| + base::Bind(&Frame::OnWillNavigateAck, base::Unretained(this),
|
| + frame_client, base::Passed(&user_data),
|
| + base::Passed(&view_tree_client), app_id,
|
| + navigation_start_time));
|
| }
|
| }
|
|
|
|
|