webview: will-navigate and page-favicon-set navigation events

This commit is contained in:
deepak1556 2015-04-18 01:25:31 +05:30
parent c424d0e9f3
commit 9b585458c1
9 changed files with 72 additions and 3 deletions

View file

@ -256,6 +256,19 @@ void WebContents::TitleWasSet(content::NavigationEntry* entry,
Emit("page-title-set", entry->GetTitle(), explicit_set); Emit("page-title-set", entry->GetTitle(), explicit_set);
} }
void WebContents::DidUpdateFaviconURL(
const std::vector<content::FaviconURL>& urls) {
std::set<GURL> unique_urls;
for (auto iter = urls.begin(); iter != urls.end(); ++iter) {
if (iter->icon_type != content::FaviconURL::FAVICON)
continue;
const GURL& url = iter->icon_url;
if (url.is_valid())
unique_urls.insert(url);
}
Emit("page-favicon-set", unique_urls);
}
bool WebContents::OnMessageReceived(const IPC::Message& message) { bool WebContents::OnMessageReceived(const IPC::Message& message) {
bool handled = true; bool handled = true;
IPC_BEGIN_MESSAGE_MAP(WebContents, message) IPC_BEGIN_MESSAGE_MAP(WebContents, message)

View file

@ -6,10 +6,13 @@
#define ATOM_BROWSER_API_ATOM_API_WEB_CONTENTS_H_ #define ATOM_BROWSER_API_ATOM_API_WEB_CONTENTS_H_
#include <string> #include <string>
#include <vector>
#include <set>
#include "atom/browser/api/event_emitter.h" #include "atom/browser/api/event_emitter.h"
#include "brightray/browser/default_web_contents_delegate.h" #include "brightray/browser/default_web_contents_delegate.h"
#include "content/public/browser/browser_plugin_guest_delegate.h" #include "content/public/browser/browser_plugin_guest_delegate.h"
#include "content/public/common/favicon_url.h"
#include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_observer.h"
#include "native_mate/handle.h" #include "native_mate/handle.h"
@ -175,6 +178,8 @@ class WebContents : public mate::EventEmitter,
void NavigationEntryCommitted( void NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) override; const content::LoadCommittedDetails& load_details) override;
void TitleWasSet(content::NavigationEntry* entry, bool explicit_set) override; void TitleWasSet(content::NavigationEntry* entry, bool explicit_set) override;
void DidUpdateFaviconURL(
const std::vector<content::FaviconURL>& urls) override;
// content::BrowserPluginGuestDelegate: // content::BrowserPluginGuestDelegate:
void DidAttach(int guest_proxy_routing_id) final; void DidAttach(int guest_proxy_routing_id) final;

View file

@ -16,6 +16,7 @@ supportedWebViewEvents = [
'crashed' 'crashed'
'destroyed' 'destroyed'
'page-title-set' 'page-title-set'
'page-favicon-set'
] ]
nextInstanceId = 0 nextInstanceId = 0

View file

@ -18,6 +18,7 @@ WEB_VIEW_EVENTS =
'crashed': [] 'crashed': []
'destroyed': [] 'destroyed': []
'page-title-set': ['title', 'explicitSet'] 'page-title-set': ['title', 'explicitSet']
'page-favicon-set': ['favicons']
dispatchEvent = (webView, event, args...) -> dispatchEvent = (webView, event, args...) ->
throw new Error("Unkown event #{event}") unless WEB_VIEW_EVENTS[event]? throw new Error("Unkown event #{event}") unless WEB_VIEW_EVENTS[event]?

View file

@ -154,6 +154,14 @@ class SrcAttribute extends WebViewAttribute
not @.getValue() not @.getValue()
return return
domEvent = new Event('will-navigate')
domEvent['url'] = @getValue()
domEvent.cancelable = true
self = @
domEvent.preventDefault = () ->
self.setValueIgnoreMutation ''
@webViewImpl.webviewNode.dispatchEvent domEvent
unless @webViewImpl.guestInstanceId? unless @webViewImpl.guestInstanceId?
if @webViewImpl.beforeFirstNavigation if @webViewImpl.beforeFirstNavigation
@webViewImpl.beforeFirstNavigation = false @webViewImpl.beforeFirstNavigation = false
@ -161,9 +169,10 @@ class SrcAttribute extends WebViewAttribute
return return
# Navigate to |this.src|. # Navigate to |this.src|.
httpreferrer = @webViewImpl.attributes[webViewConstants.ATTRIBUTE_HTTPREFERRER].getValue() if @getValue()
urlOptions = if httpreferrer then {httpreferrer} else {} httpreferrer = @webViewImpl.attributes[webViewConstants.ATTRIBUTE_HTTPREFERRER].getValue()
remote.getGuestWebContents(@webViewImpl.guestInstanceId).loadUrl @getValue(), urlOptions urlOptions = if httpreferrer then {httpreferrer} else {}
remote.getGuestWebContents(@webViewImpl.guestInstanceId).loadUrl @getValue(), urlOptions
# Attribute specifies HTTP referrer. # Attribute specifies HTTP referrer.
class HttpReferrerAttribute extends WebViewAttribute class HttpReferrerAttribute extends WebViewAttribute

View file

@ -662,6 +662,13 @@ Emitted when details regarding a requested resource is available.
Emitted when a redirect was received while requesting a resource. Emitted when a redirect was received while requesting a resource.
### Event: 'page-favicon-set'
* `event` Event
* `favicons` [String]
Emitted when page receives favicon urls.
### Event: 'new-window' ### Event: 'new-window'
* `event` Event * `event` Event

View file

@ -275,6 +275,13 @@ examples.
## DOM events ## DOM events
### will-navigate
* `url` String
Fired when view is about to navigate , calling `event.preventDefault()` will
cancel the navigation.
### did-finish-load ### did-finish-load
Fired when the navigation is done, i.e. the spinner of the tab will stop Fired when the navigation is done, i.e. the spinner of the tab will stop
@ -330,6 +337,12 @@ Fired when a redirect was received while requesting a resource.
Fired when page title is set during navigation. `explicitSet` is false when title is synthesised from file Fired when page title is set during navigation. `explicitSet` is false when title is synthesised from file
url. url.
### page-favicon-set
* `favicons` [String]
Fired when page receives favicon urls.
### console-message ### console-message
* `level` Integer * `level` Integer

View file

@ -1,4 +1,6 @@
<html> <html>
<link rel="icon" type="image/png" href="/favicon.png"/>
<link rel="icon" type="image/png" href="http://test.com/favicon.png"/>
<body> <body>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
console.log('a'); console.log('a');

View file

@ -151,3 +151,21 @@ describe '<webview> tag', ->
done() done()
webview.src = "file://#{fixtures}/pages/a.html" webview.src = "file://#{fixtures}/pages/a.html"
document.body.appendChild webview document.body.appendChild webview
describe 'will-navigate event', ->
it 'is emitted before navigation', (done) ->
webview.addEventListener 'will-navigate', (e) ->
e.preventDefault()
assert.equal webview.src, ''
done()
webview.src = "file://#{fixtures}/pages/a.html"
document.body.appendChild webview
describe 'page-favicon-set event', ->
it 'emits when favicon is set', (done) ->
webview.addEventListener 'page-favicon-set', (e) ->
assert.equal e.favicons.length, 2
assert.equal e.favicons[0], 'file:///favicon.png'
done()
webview.src = "file://#{fixtures}/pages/a.html"
document.body.appendChild webview