Add CefBrowser::ReloadIgnoreCache() method and MENU_ID_NAV_RELOAD_NOCACHE menu support. (issue #118).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@107 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2010-09-23 16:05:10 +00:00
parent de51597b22
commit 4fd793f802
10 changed files with 55 additions and 16 deletions

View File

@ -361,6 +361,9 @@ public:
// Reload the current page.
/*--cef()--*/
virtual void Reload() =0;
// Reload the current page ignoring any cached data.
/*--cef()--*/
virtual void ReloadIgnoreCache() =0;
// Stop loading the page.
/*--cef()--*/
virtual void StopLoad() =0;

View File

@ -210,6 +210,9 @@ typedef struct _cef_browser_t
// Reload the current page.
void (CEF_CALLBACK *reload)(struct _cef_browser_t* self);
// Reload the current page ignoring any cached data.
void (CEF_CALLBACK *reload_ignore_cache)(struct _cef_browser_t* self);
// Stop loading the page.
void (CEF_CALLBACK *stop_load)(struct _cef_browser_t* self);

View File

@ -185,7 +185,8 @@ enum cef_handler_menuid_t
MENU_ID_NAV_BACK = 10,
MENU_ID_NAV_FORWARD = 11,
MENU_ID_NAV_RELOAD = 12,
MENU_ID_NAV_STOP = 13,
MENU_ID_NAV_RELOAD_NOCACHE = 13,
MENU_ID_NAV_STOP = 14,
MENU_ID_UNDO = 20,
MENU_ID_REDO = 21,
MENU_ID_CUT = 22,

View File

@ -136,6 +136,12 @@ void CefBrowserImpl::Reload()
&CefBrowserImpl::UIT_HandleActionView, MENU_ID_NAV_RELOAD));
}
void CefBrowserImpl::ReloadIgnoreCache()
{
CefThread::PostTask(CefThread::UI, FROM_HERE, NewRunnableMethod(this,
&CefBrowserImpl::UIT_HandleActionView, MENU_ID_NAV_RELOAD_NOCACHE));
}
void CefBrowserImpl::StopLoad()
{
CefThread::PostTask(CefThread::UI, FROM_HERE, NewRunnableMethod(this,
@ -669,14 +675,15 @@ void CefBrowserImpl::UIT_GoBackOrForward(int offset)
nav_controller_->GoToOffset(offset);
}
void CefBrowserImpl::UIT_Reload()
void CefBrowserImpl::UIT_Reload(bool ignoreCache)
{
REQUIRE_UIT();
nav_controller_->Reload();
nav_controller_->Reload(ignoreCache);
}
bool CefBrowserImpl::UIT_Navigate(const BrowserNavigationEntry& entry,
bool reload)
bool reload,
bool ignoreCache)
{
REQUIRE_UIT();
@ -704,7 +711,7 @@ bool CefBrowserImpl::UIT_Navigate(const BrowserNavigationEntry& entry,
// If we are reloading, then WebKit will use the state of the current page.
// Otherwise, we give it the state to navigate to.
if (reload) {
frame->reload();
frame->reload(ignoreCache);
} else if (!entry.GetContentState().empty()) {
DCHECK(entry.GetPageID() != -1);
frame->loadHistoryItem(
@ -813,7 +820,10 @@ void CefBrowserImpl::UIT_HandleAction(CefHandler::MenuId menuId,
UIT_GoBackOrForward(1);
break;
case MENU_ID_NAV_RELOAD:
UIT_Reload();
UIT_Reload(false);
break;
case MENU_ID_NAV_RELOAD_NOCACHE:
UIT_Reload(true);
break;
case MENU_ID_NAV_STOP:
if (GetWebView())

View File

@ -49,6 +49,7 @@ public:
virtual bool CanGoForward();
virtual void GoForward();
virtual void Reload();
virtual void ReloadIgnoreCache();
virtual void StopLoad();
virtual void SetFocus(bool enable);
virtual CefWindowHandle GetWindowHandle();
@ -183,8 +184,10 @@ public:
const std::wstring& script_url,
int start_line);
void UIT_GoBackOrForward(int offset);
void UIT_Reload();
bool UIT_Navigate(const BrowserNavigationEntry& entry, bool reload);
void UIT_Reload(bool ignoreCache);
bool UIT_Navigate(const BrowserNavigationEntry& entry,
bool reload,
bool ignoreCahce);
void UIT_SetFocus(WebWidgetHost* host, bool enable);
CefRefPtr<CefBrowserImpl> UIT_CreatePopupWindow(const std::wstring& url);

View File

@ -62,7 +62,7 @@ void BrowserNavigationController::Reset() {
last_committed_entry_index_ = -1;
}
void BrowserNavigationController::Reload() {
void BrowserNavigationController::Reload(bool ignoreCache) {
// Base the navigation on where we are now...
int current_index = GetCurrentEntryIndex();
@ -74,7 +74,7 @@ void BrowserNavigationController::Reload() {
DiscardPendingEntry();
pending_entry_index_ = current_index;
NavigateToPendingEntry(true);
NavigateToPendingEntry(true, ignoreCache);
}
void BrowserNavigationController::GoToOffset(int offset) {
@ -92,7 +92,7 @@ void BrowserNavigationController::GoToIndex(int index) {
DiscardPendingEntry();
pending_entry_index_ = index;
NavigateToPendingEntry(false);
NavigateToPendingEntry(false, false);
}
void BrowserNavigationController::LoadEntry(BrowserNavigationEntry* entry) {
@ -101,7 +101,7 @@ void BrowserNavigationController::LoadEntry(BrowserNavigationEntry* entry) {
// result in a download or a 'no content' response (e.g., a mailto: URL).
DiscardPendingEntry();
pending_entry_ = entry;
NavigateToPendingEntry(false);
NavigateToPendingEntry(false, false);
}
@ -218,14 +218,14 @@ int BrowserNavigationController::GetEntryIndexWithPageID(int32 page_id) const {
return -1;
}
void BrowserNavigationController::NavigateToPendingEntry(bool reload) {
void BrowserNavigationController::NavigateToPendingEntry(bool reload, bool ignoreCache) {
// For session history navigations only the pending_entry_index_ is set.
if (!pending_entry_) {
DCHECK(pending_entry_index_ != -1);
pending_entry_ = entries_[pending_entry_index_].get();
}
if (browser_->UIT_Navigate(*pending_entry_, reload)) {
if (browser_->UIT_Navigate(*pending_entry_, reload, ignoreCache)) {
// Note: this is redundant if navigation completed synchronously because
// DidNavigateToEntry call this as well.
UpdateMaxPageID();

View File

@ -103,7 +103,7 @@ class BrowserNavigationController {
void Reset();
// Causes the controller to reload the current (or pending) entry.
void Reload();
void Reload(bool ignoreCache);
// Causes the controller to go to the specified offset from current. Does
// nothing if out of bounds.
@ -176,7 +176,7 @@ class BrowserNavigationController {
void InsertEntry(BrowserNavigationEntry* entry);
int GetMaxPageID() const { return max_page_id_; }
void NavigateToPendingEntry(bool reload);
void NavigateToPendingEntry(bool reload, bool ignoreCache);
// Return the index of the entry with the corresponding type and page_id,
// or -1 if not found.

View File

@ -103,6 +103,15 @@ void CEF_CALLBACK browser_reload(struct _cef_browser_t* self)
CefBrowserCppToC::Get(self)->Reload();
}
void CEF_CALLBACK browser_reload_ignore_cache(struct _cef_browser_t* self)
{
DCHECK(self);
if(!self)
return;
CefBrowserCppToC::Get(self)->ReloadIgnoreCache();
}
void CEF_CALLBACK browser_stop_load(struct _cef_browser_t* self)
{
DCHECK(self);
@ -255,6 +264,7 @@ CefBrowserCppToC::CefBrowserCppToC(CefBrowser* cls)
struct_.struct_.can_go_forward = browser_can_go_forward;
struct_.struct_.go_forward = browser_go_forward;
struct_.struct_.reload = browser_reload;
struct_.struct_.reload_ignore_cache = browser_reload_ignore_cache;
struct_.struct_.stop_load = browser_stop_load;
struct_.struct_.set_focus = browser_set_focus;
struct_.struct_.get_window_handle = browser_get_window_handle;

View File

@ -77,6 +77,14 @@ void CefBrowserCToCpp::Reload()
struct_->reload(struct_);
}
void CefBrowserCToCpp::ReloadIgnoreCache()
{
if(CEF_MEMBER_MISSING(struct_, reload))
return;
struct_->reload_ignore_cache(struct_);
}
void CefBrowserCToCpp::StopLoad()
{
if(CEF_MEMBER_MISSING(struct_, stop_load))

View File

@ -36,6 +36,7 @@ public:
virtual bool CanGoForward();
virtual void GoForward();
virtual void Reload();
virtual void ReloadIgnoreCache();
virtual void StopLoad();
virtual void SetFocus(bool enable);
virtual CefWindowHandle GetWindowHandle();