| Index: extensions/browser/guest_view/web_view/web_view_guest.cc
|
| diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc
|
| index b3dda987a080982e9fcc984ca330266b3ccf5556..bd1ad93d02c05e654f5922d98a37635daa8203ce 100644
|
| --- a/extensions/browser/guest_view/web_view/web_view_guest.cc
|
| +++ b/extensions/browser/guest_view/web_view/web_view_guest.cc
|
| @@ -273,7 +273,7 @@ void WebViewGuest::DidAttachToEmbedder() {
|
|
|
| std::string src;
|
| if (attach_params()->GetString(webview::kAttributeSrc, &src) && !src.empty())
|
| - NavigateGuest(src);
|
| + NavigateGuest(src, false /* force_navigation */);
|
|
|
| if (GetOpener()) {
|
| // We need to do a navigation here if the target URL has changed between
|
| @@ -285,7 +285,7 @@ void WebViewGuest::DidAttachToEmbedder() {
|
| if (it != GetOpener()->pending_new_windows_.end()) {
|
| const NewWindowInfo& new_window_info = it->second;
|
| if (new_window_info.changed || !web_contents()->HasOpener())
|
| - NavigateGuest(new_window_info.url.spec());
|
| + NavigateGuest(new_window_info.url.spec(), false /* force_navigation */);
|
| } else {
|
| NOTREACHED();
|
| }
|
| @@ -383,10 +383,6 @@ void WebViewGuest::WillDestroy() {
|
| if (!attached() && GetOpener())
|
| GetOpener()->pending_new_windows_.erase(this);
|
| DestroyUnattachedWindows();
|
| -
|
| - scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
|
| - DispatchEventToEmbedder(
|
| - new GuestViewBase::Event(webview::kEventPluginDestroyed, args.Pass()));
|
| }
|
|
|
| bool WebViewGuest::AddMessageToConsole(WebContents* source,
|
| @@ -658,6 +654,8 @@ void WebViewGuest::DidCommitProvisionalLoadForFrame(
|
| content::RenderFrameHost* render_frame_host,
|
| const GURL& url,
|
| ui::PageTransition transition_type) {
|
| + if (!render_frame_host->GetParent())
|
| + src_ = url;
|
| scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
|
| args->SetString(guestview::kUrl, url.spec());
|
| args->SetBoolean(guestview::kIsTopLevel, !render_frame_host->GetParent());
|
| @@ -877,7 +875,11 @@ content::ColorChooser* WebViewGuest::OpenColorChooser(
|
| web_contents, color, suggestions);
|
| }
|
|
|
| -void WebViewGuest::NavigateGuest(const std::string& src) {
|
| +void WebViewGuest::NavigateGuest(const std::string& src,
|
| + bool force_navigation) {
|
| + if (src.empty())
|
| + return;
|
| +
|
| GURL url = ResolveURL(src);
|
|
|
| // Do not allow navigating a guest to schemes other than known safe schemes.
|
| @@ -893,6 +895,8 @@ void WebViewGuest::NavigateGuest(const std::string& src) {
|
| net::ErrorToShortString(net::ERR_ABORTED));
|
| return;
|
| }
|
| + if (!force_navigation && (src_ == url))
|
| + return;
|
|
|
| GURL validated_url(url);
|
| web_contents()->GetRenderProcessHost()->FilterURL(false, &validated_url);
|
|
|