Add support for navigator.onLine and online/offline window events (issue #234).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@234 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2011-05-18 15:49:52 +00:00
parent abfc77abd1
commit 9a69e96950
2 changed files with 32 additions and 1 deletions

View File

@ -16,6 +16,7 @@
#include "build/build_config.h"
#include "net/base/net_module.h"
#include "net/url_request/url_request.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebNetworkStateNotifier.h"
#include "ui/gfx/gl/gl_implementation.h"
#include "webkit/blob/blob_storage_controller.h"
#include "webkit/blob/blob_url_request_job.h"
@ -175,6 +176,16 @@ void CefProcessUIThread::Init() {
webkit::npapi::PluginList::Singleton()->AddExtraPluginPath(path);
}
}
// Create a network change notifier before starting the IO & File threads.
network_change_notifier_.reset(net::NetworkChangeNotifier::Create());
// Add a listener for OnOnlineStateChanged to notify WebKit of changes.
net::NetworkChangeNotifier::AddOnlineStateObserver(this);
// Initialize WebKit with the current state.
WebKit::WebNetworkStateNotifier::setOnLine(
!net::NetworkChangeNotifier::IsOffline());
}
void CefProcessUIThread::CleanUp() {
@ -195,5 +206,15 @@ void CefProcessUIThread::CleanUp() {
delete webkit_init_;
webkit_init_ = NULL;
// Release the network change notifier after all other threads end.
net::NetworkChangeNotifier::RemoveOnlineStateObserver(this);
network_change_notifier_.reset();
PlatformCleanUp();
}
void CefProcessUIThread::OnOnlineStateChanged(bool online) {
DCHECK(CefThread::CurrentlyOn(CefThread::UI));
WebKit::WebNetworkStateNotifier::setOnLine(online);
}

View File

@ -7,7 +7,9 @@
#define _CEF_PROCESS_UI_THREAD
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "cef_thread.h"
#include "net/base/network_change_notifier.h"
class BrowserWebKitInit;
namespace base {
@ -23,7 +25,10 @@ class StatsTable;
// Applications must initialize the COM library before they can call
// COM library functions other than CoGetMalloc and memory allocation
// functions, so this class initializes COM for those users.
class CefProcessUIThread : public CefThread {
class CefProcessUIThread
: public net::NetworkChangeNotifier::OnlineStateObserver,
public CefThread
{
public:
explicit CefProcessUIThread();
CefProcessUIThread(MessageLoop* message_loop);
@ -36,11 +41,16 @@ class CefProcessUIThread : public CefThread {
void PlatformInit();
void PlatformCleanUp();
// From net::NetworkChangeNotifier::OnlineStateObserver
void OnOnlineStateChanged(bool online);
base::StatsTable* statstable_;
// WebKit implementation class.
BrowserWebKitInit* webkit_init_;
scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
DISALLOW_COPY_AND_ASSIGN(CefProcessUIThread);
};