Use Chrome's navigation controller for in-page navigations

This commit is contained in:
Cheng Zhao 2015-05-11 14:30:26 +08:00
parent 4d1cd7e15f
commit 40631edb70
3 changed files with 31 additions and 10 deletions

View file

@ -443,6 +443,14 @@ void WebContents::ReloadIgnoringCache() {
web_contents()->GetController().ReloadIgnoringCache(false);
}
void WebContents::GoBack() {
web_contents()->GetController().GoBack();
}
void WebContents::GoForward() {
web_contents()->GetController().GoForward();
}
int WebContents::GetRoutingID() const {
return web_contents()->GetRoutingID();
}
@ -611,6 +619,8 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse)
.SetMethod("_stop", &WebContents::Stop)
.SetMethod("_reloadIgnoringCache", &WebContents::ReloadIgnoringCache)
.SetMethod("_goBack", &WebContents::GoBack)
.SetMethod("_goForward", &WebContents::GoForward)
.SetMethod("getRoutingId", &WebContents::GetRoutingID)
.SetMethod("getProcessId", &WebContents::GetProcessID)
.SetMethod("isCrashed", &WebContents::IsCrashed)

View file

@ -53,6 +53,9 @@ class WebContents : public mate::EventEmitter,
bool IsWaitingForResponse() const;
void Stop();
void ReloadIgnoringCache();
void GoBack();
void GoForward();
void GoToIndex();
int GetRoutingID() const;
int GetProcessID() const;
bool IsCrashed() const;

View file

@ -10,20 +10,20 @@ class NavigationController
@pendingIndex = -1
@webContents.on 'navigation-entry-commited', (event, url, inPage, replaceEntry) =>
if replaceEntry
@history[@currentIndex] = {url, inPage}
return
console.log 'navigation-entry-commited', url, inPage, replaceEntry
if @pendingIndex is -1 # Normal navigation.
if @pendingIndex >= 0 # Go to index.
@currentIndex = @pendingIndex
@pendingIndex = -1
@history[@currentIndex] = {url, inPage}
else if replaceEntry # Non-user initialized navigation.
@history[@currentIndex] = {url, inPage}
else # Normal navigation.
@history = @history.slice 0, @currentIndex + 1 # Clear history.
currentEntry = @history[@currentIndex]
if currentEntry?.url isnt url or currentEntry?.inPage isnt inPage
@currentIndex++
@history.push {url, inPage}
else # Go to index.
@currentIndex = @pendingIndex
@pendingIndex = -1
@history[@currentIndex] = {url, inPage}
loadUrl: (url, options={}) ->
@pendingIndex = -1
@ -62,12 +62,20 @@ class NavigationController
goBack: ->
return unless @canGoBack()
@pendingIndex = @getActiveIndex() - 1
@webContents._loadUrl @history[@pendingIndex].url, {}
pendingEntry = @history[@pendingIndex]
if pendingEntry.inPage
@webContents._goBack()
else
@webContents._loadUrl pendingEntry.url, {}
goForward: ->
return unless @canGoForward()
@pendingIndex = @getActiveIndex() + 1
@webContents._loadUrl @history[@pendingIndex].url, {}
pendingEntry = @history[@pendingIndex]
if pendingEntry.inPage
@webContents._goForward()
else
@webContents._loadUrl pendingEntry.url, {}
goToIndex: (index) ->
return unless @canGoToIndex index