Index: components/html_viewer/frame_tree_manager.cc |
diff --git a/components/html_viewer/frame_tree_manager.cc b/components/html_viewer/frame_tree_manager.cc |
index d543496ad4edd4be265082c9ba1d21a446463c48..a137a42759b77653184b9545a97831a138269ef1 100644 |
--- a/components/html_viewer/frame_tree_manager.cc |
+++ b/components/html_viewer/frame_tree_manager.cc |
@@ -8,6 +8,7 @@ |
#include "base/command_line.h" |
#include "base/logging.h" |
+#include "components/html_viewer/blink_basic_type_converters.h" |
#include "components/html_viewer/blink_url_request_type_converters.h" |
#include "components/html_viewer/frame.h" |
#include "components/html_viewer/frame_tree_manager_delegate.h" |
@@ -55,7 +56,9 @@ bool CanNavigateLocally(blink::WebFrame* frame, |
// Creates a Frame per FrameData element in |frame_data|. |
Frame* BuildFrameTree(FrameTreeManager* frame_tree_manager, |
- const mojo::Array<mandoline::FrameDataPtr>& frame_data) { |
+ const mojo::Array<mandoline::FrameDataPtr>& frame_data, |
+ uint32_t local_frame_id, |
+ mojo::View* local_view) { |
std::vector<Frame*> parents; |
Frame* root = nullptr; |
Frame* last_frame = nullptr; |
@@ -75,6 +78,9 @@ Frame* BuildFrameTree(FrameTreeManager* frame_tree_manager, |
else |
DCHECK(frame->parent()); |
last_frame = frame; |
+ |
+ frame->Init(local_view, frame_data[i]->name.To<blink::WebString>(), |
+ frame_data[i]->origin.To<blink::WebString>()); |
} |
return root; |
} |
@@ -103,12 +109,9 @@ FrameTreeManager::~FrameTreeManager() { |
void FrameTreeManager::Init(mojo::View* local_view, |
mojo::Array<mandoline::FrameDataPtr> frame_data) { |
- root_ = BuildFrameTree(this, frame_data); |
- CHECK(root_); |
+ root_ = BuildFrameTree(this, frame_data, local_frame_id_, local_view); |
Frame* local_frame = root_->FindFrame(local_frame_id_); |
CHECK(local_frame); |
- local_frame->SetView(local_view); |
- InitFrames(local_view, root_); |
local_frame->UpdateFocus(); |
} |
@@ -124,13 +127,6 @@ blink::WebView* FrameTreeManager::GetWebView() { |
return root_->web_view(); |
} |
-void FrameTreeManager::InitFrames(mojo::View* local_view, Frame* frame) { |
- frame->Init(local_view); |
- |
- for (Frame* child_frame : frame->children()) |
- InitFrames(local_view, child_frame); |
-} |
- |
blink::WebNavigationPolicy FrameTreeManager::DecidePolicyForNavigation( |
Frame* frame, |
const blink::WebFrameClient::NavigationPolicyInfo& info) { |
@@ -173,6 +169,17 @@ void FrameTreeManager::OnFrameDestroyed(Frame* frame) { |
} |
} |
+void FrameTreeManager::OnFrameDidChangeName(Frame* frame, |
+ const blink::WebString& name) { |
+ if (frame != GetLocalFrame()) |
+ return; |
+ |
+ mojo::String mojo_name; |
+ if (!name.isNull()) |
+ mojo_name = name.utf8(); |
+ server_->SetFrameName(mojo_name); |
+} |
+ |
void FrameTreeManager::OnConnect( |
mandoline::FrameTreeServerPtr server, |
mojo::Array<mandoline::FrameDataPtr> frame_data) { |
@@ -201,4 +208,11 @@ void FrameTreeManager::OnFrameRemoved(uint32_t frame_id) { |
NOTIMPLEMENTED(); |
} |
+void FrameTreeManager::OnFrameNameChanged(uint32_t frame_id, |
+ const mojo::String& name) { |
+ Frame* frame = root_->FindFrame(frame_id); |
+ if (frame) |
+ frame->SetRemoteFrameName(name); |
+} |
+ |
} // namespace mojo |