added did-navigate event, getFavicon api and workaround webview spec

This commit is contained in:
deepak1556 2015-04-20 12:20:04 +05:30
parent 9b585458c1
commit 36819e2638
9 changed files with 51 additions and 10 deletions

View file

@ -11,10 +11,12 @@
#include "atom/common/api/api_messages.h"
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/image_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "base/strings/utf_string_conversions.h"
#include "brightray/browser/inspectable_web_contents.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_frame_host.h"
@ -266,7 +268,7 @@ void WebContents::DidUpdateFaviconURL(
if (url.is_valid())
unique_urls.insert(url);
}
Emit("page-favicon-set", unique_urls);
Emit("page-favicon-updated", unique_urls);
}
bool WebContents::OnMessageReceived(const IPC::Message& message) {
@ -308,6 +310,8 @@ void WebContents::WebContentsDestroyed() {
void WebContents::NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) {
if (load_details.is_navigation_to_different_page())
Emit("did-navigate");
auto entry = web_contents()->GetController().GetLastCommittedEntry();
entry->SetVirtualURL(load_details.entry->GetOriginalRequestURL());
}
@ -392,6 +396,14 @@ base::string16 WebContents::GetTitle() const {
return web_contents()->GetTitle();
}
gfx::Image WebContents::GetFavicon() const {
auto entry = web_contents()->GetController().GetLastCommittedEntry();
if (!entry)
return gfx::Image();
auto favicon_status = entry->GetFavicon();
return favicon_status.image;
}
bool WebContents::IsLoading() const {
return web_contents()->IsLoading();
}
@ -583,6 +595,7 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("_loadUrl", &WebContents::LoadURL)
.SetMethod("getUrl", &WebContents::GetURL)
.SetMethod("getTitle", &WebContents::GetTitle)
.SetMethod("getFavicon", &WebContents::GetFavicon)
.SetMethod("isLoading", &WebContents::IsLoading)
.SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse)
.SetMethod("stop", &WebContents::Stop)

View file

@ -16,6 +16,7 @@
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h"
#include "native_mate/handle.h"
#include "ui/gfx/image/image.h"
namespace brightray {
class InspectableWebContents;
@ -49,6 +50,7 @@ class WebContents : public mate::EventEmitter,
void LoadURL(const GURL& url, const mate::Dictionary& options);
GURL GetURL() const;
base::string16 GetTitle() const;
gfx::Image GetFavicon() const;
bool IsLoading() const;
bool IsWaitingForResponse() const;
void Stop();

View file

@ -6,6 +6,7 @@ supportedWebViewEvents = [
'did-finish-load'
'did-fail-load'
'did-frame-finish-load'
'did-navigate'
'did-start-loading'
'did-stop-loading'
'did-get-response-details'
@ -16,7 +17,7 @@ supportedWebViewEvents = [
'crashed'
'destroyed'
'page-title-set'
'page-favicon-set'
'page-favicon-updated'
]
nextInstanceId = 0

View file

@ -7,6 +7,7 @@ WEB_VIEW_EVENTS =
'did-finish-load': []
'did-fail-load': ['errorCode', 'errorDescription']
'did-frame-finish-load': ['isMainFrame']
'did-navigate': []
'did-start-loading': []
'did-stop-loading': []
'did-get-response-details': ['status', 'newUrl', 'originalUrl',
@ -18,7 +19,7 @@ WEB_VIEW_EVENTS =
'crashed': []
'destroyed': []
'page-title-set': ['title', 'explicitSet']
'page-favicon-set': ['favicons']
'page-favicon-updated': ['favicons']
dispatchEvent = (webView, event, args...) ->
throw new Error("Unkown event #{event}") unless WEB_VIEW_EVENTS[event]?

View file

@ -154,6 +154,7 @@ class SrcAttribute extends WebViewAttribute
not @.getValue()
return
# Allow users to cancel webview navigation.
domEvent = new Event('will-navigate')
domEvent['url'] = @getValue()
domEvent.cancelable = true

View file

@ -236,6 +236,7 @@ registerWebViewElement = ->
methods = [
"getUrl"
"getTitle"
"getFavicon"
"isLoading"
"isWaitingForResponse"
"stop"

View file

@ -632,6 +632,12 @@ cancelled, e.g. `window.stop()` is invoked.
Emitted when a frame has done navigation.
### Event: 'did-navigate'
* `event` Event
Emitted when a frame navigation has been committed to history.
### Event: 'did-start-loading'
Corresponds to the points in time when the spinner of the tab starts spinning.
@ -662,7 +668,7 @@ Emitted when details regarding a requested resource is available.
Emitted when a redirect was received while requesting a resource.
### Event: 'page-favicon-set'
### Event: 'page-favicon-updated'
* `event` Event
* `favicons` [String]
@ -720,6 +726,10 @@ Returns URL of current web page.
Returns the title of web page.
### WebContents.getFavicon()
Returns the favicon of web page as `nativeImage`.
### WebContents.isLoading()
Returns whether web page is still loading resources.

View file

@ -130,6 +130,10 @@ Returns URL of guest page.
Returns the title of guest page.
### `<webview>`.getFavicon()
Returns the favicon of guest page as `nativeImage`.
### `<webview>`.isLoading()
Returns whether guest page is still loading resources.
@ -301,6 +305,10 @@ cancelled, e.g. `window.stop()` is invoked.
Fired when a frame has done navigation.
### did-navigate
Fired when a frame navigation has been committed to history.
### did-start-loading
Corresponds to the points in time when the spinner of the tab starts spinning.
@ -337,7 +345,7 @@ 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
url.
### page-favicon-set
### page-favicon-updated
* `favicons` [String]

View file

@ -154,16 +154,20 @@ describe '<webview> tag', ->
describe 'will-navigate event', ->
it 'is emitted before navigation', (done) ->
webview.addEventListener 'will-navigate', (e) ->
view = new WebView
view.addEventListener 'will-navigate', (e) ->
e.preventDefault()
assert.equal webview.src, ''
view.addEventListener 'did-navigate', (e) ->
document.body.removeChild view
done()
webview.src = "file://#{fixtures}/pages/a.html"
view.src = "file://#{fixtures}/pages/a.html"
document.body.appendChild view
document.body.appendChild webview
describe 'page-favicon-set event', ->
it 'emits when favicon is set', (done) ->
webview.addEventListener 'page-favicon-set', (e) ->
describe 'page-favicon-updated event', ->
it 'emits when favicon urls are received', (done) ->
webview.addEventListener 'page-favicon-updated', (e) ->
assert.equal e.favicons.length, 2
assert.equal e.favicons[0], 'file:///favicon.png'
done()