Index: chrome/browser/guest_view/web_view/web_view_guest.cc |
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.cc b/chrome/browser/guest_view/web_view/web_view_guest.cc |
index 465495e7a3c9cfd107f733072dbdaa9218b49dcd..5980b36d106906acb1905bb485946f862d7461bf 100644 |
--- a/chrome/browser/guest_view/web_view/web_view_guest.cc |
+++ b/chrome/browser/guest_view/web_view/web_view_guest.cc |
@@ -310,6 +310,12 @@ scoped_ptr<base::ListValue> WebViewGuest::MenuModelToValue( |
void WebViewGuest::Attach(WebContents* embedder_web_contents, |
const base::DictionaryValue& args) { |
+ std::string name; |
+ args.GetString(webview::kName, &name); |
+ if (name_.empty()) |
lazyboy
2014/05/21 16:27:05
I think we had a note/comment here about which nam
Fady Samuel
2014/05/21 16:56:49
Done.
|
+ name_ = name; |
+ ReportFrameNameChange(name_); |
+ |
std::string user_agent_override; |
if (args.GetString(webview::kParameterUserAgentOverride, |
&user_agent_override)) { |
@@ -865,6 +871,18 @@ void WebViewGuest::UserAgentOverrideSet(const std::string& user_agent) { |
guest_web_contents()->GetController().Reload(false); |
} |
+void WebViewGuest::RenderViewReady() { |
+ guest_web_contents()->SetMainFrameName(name_); |
+} |
+ |
+void WebViewGuest::ReportFrameNameChange(const std::string& name) { |
+ name_ = name; |
+ scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
+ args->SetString(webview::kName, name); |
+ DispatchEvent( |
+ new GuestViewBase::Event(webview::kEventFrameNameChanged, args.Pass())); |
+} |
+ |
void WebViewGuest::LoadHandlerCalled() { |
scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
DispatchEvent( |
@@ -1205,6 +1223,13 @@ void WebViewGuest::ShowContextMenu(int request_id, |
menu_delegate->ShowMenu(pending_menu_.Pass()); |
} |
+void WebViewGuest::SetName(const std::string& name) { |
+ if (name_ == name) |
+ return; |
+ name_ = name; |
+ guest_web_contents()->SetMainFrameName(name); |
+} |
+ |
void WebViewGuest::Destroy() { |
if (!attached() && GetOpener()) |
GetOpener()->pending_new_windows_.erase(this); |
@@ -1263,10 +1288,23 @@ void WebViewGuest::WebContentsCreated(WebContents* source_contents, |
CHECK(guest); |
guest->SetOpener(this); |
std::string guest_name = base::UTF16ToUTF8(frame_name); |
+ guest->name_ = guest_name; |
pending_new_windows_.insert( |
std::make_pair(guest, NewWindowInfo(target_url, guest_name))); |
} |
+void WebViewGuest::FrameNameChanged(int render_frame_id, |
+ bool is_top_level, |
+ const std::string& name) { |
+ if (!is_top_level) |
+ return; |
+ |
+ if (name_ == name) |
+ return; |
+ |
+ ReportFrameNameChange(name); |
+} |
+ |
void WebViewGuest::LoadURLWithParams(const GURL& url, |
const content::Referrer& referrer, |
content::PageTransition transition_type, |