summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/renderer/render_widget.h1
-rw-r--r--webkit/glue/webview_impl.cc7
-rw-r--r--webkit/glue/webview_impl.h1
-rw-r--r--webkit/glue/webwidget_delegate.h3
-rw-r--r--webkit/glue/webwidget_impl.cc6
-rw-r--r--webkit/glue/webwidget_impl.h1
-rw-r--r--webkit/port/platform/ScrollViewWin.cpp8
-rw-r--r--webkit/port/platform/WidgetClientWin.h3
8 files changed, 27 insertions, 3 deletions
diff --git a/chrome/renderer/render_widget.h b/chrome/renderer/render_widget.h
index c9bdc39..98d0377 100644
--- a/chrome/renderer/render_widget.h
+++ b/chrome/renderer/render_widget.h
@@ -76,6 +76,7 @@ class RenderWidget : public IPC::Channel::Listener,
virtual void GetRootWindowRect(WebWidget* webwidget, gfx::Rect* rect);
virtual void DidMove(WebWidget* webwidget, const WebPluginGeometry& move);
virtual void RunModal(WebWidget* webwidget) {}
+ virtual bool IsHidden() { return is_hidden_; }
// Close the underlying WebWidget.
void Close();
diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc
index 85ef80d..ca86104 100644
--- a/webkit/glue/webview_impl.cc
+++ b/webkit/glue/webview_impl.cc
@@ -1469,6 +1469,13 @@ size_t WebViewImpl::getActiveTickmarkIndex(WebCore::Frame* frame) {
return webframe_impl->active_tickmark_index();
}
+bool WebViewImpl::isHidden() {
+ if (!delegate_)
+ return true;
+
+ return delegate_->IsHidden();
+}
+
//-----------------------------------------------------------------------------
// WebCore::BackForwardListClient
diff --git a/webkit/glue/webview_impl.h b/webkit/glue/webview_impl.h
index 1fb2ebb..ebe9e14 100644
--- a/webkit/glue/webview_impl.h
+++ b/webkit/glue/webview_impl.h
@@ -203,6 +203,7 @@ class WebViewImpl : public WebView,
virtual const WTF::Vector<RefPtr<WebCore::Range> >* getTickmarks(
WebCore::Frame* frame);
virtual size_t getActiveTickmarkIndex(WebCore::Frame* frame);
+ virtual bool isHidden();
// WebCore::BackForwardListClient
virtual void didAddHistoryItem(WebCore::HistoryItem* item);
diff --git a/webkit/glue/webwidget_delegate.h b/webkit/glue/webwidget_delegate.h
index faf4d0a..45d0dcc 100644
--- a/webkit/glue/webwidget_delegate.h
+++ b/webkit/glue/webwidget_delegate.h
@@ -79,6 +79,9 @@ class WebWidgetDelegate {
virtual void AddRef() = 0;
virtual void Release() = 0;
+ // Returns true if the widget is in a background tab.
+ virtual bool IsHidden() = 0;
+
WebWidgetDelegate() { }
virtual ~WebWidgetDelegate() { }
diff --git a/webkit/glue/webwidget_impl.cc b/webkit/glue/webwidget_impl.cc
index 36952e0..eb7870a 100644
--- a/webkit/glue/webwidget_impl.cc
+++ b/webkit/glue/webwidget_impl.cc
@@ -252,3 +252,9 @@ void WebWidgetImpl::setFocus() {
delegate_->Focus(this);
}
+bool WebWidgetImpl::isHidden() {
+ if (!delegate_)
+ return true;
+
+ return delegate_->IsHidden();
+}
diff --git a/webkit/glue/webwidget_impl.h b/webkit/glue/webwidget_impl.h
index 5c706a7..ddb4fde 100644
--- a/webkit/glue/webwidget_impl.h
+++ b/webkit/glue/webwidget_impl.h
@@ -85,6 +85,7 @@ class WebWidgetImpl : public WebWidget, public WebCore::WidgetClientWin {
virtual const WTF::Vector<RefPtr<WebCore::Range> >* getTickmarks(
WebCore::Frame* frame);
virtual size_t getActiveTickmarkIndex(WebCore::Frame* frame);
+ virtual bool isHidden();
WebWidgetDelegate* delegate_;
gfx::Size size_;
diff --git a/webkit/port/platform/ScrollViewWin.cpp b/webkit/port/platform/ScrollViewWin.cpp
index 6964f82..2a7ebbc 100644
--- a/webkit/port/platform/ScrollViewWin.cpp
+++ b/webkit/port/platform/ScrollViewWin.cpp
@@ -1128,9 +1128,11 @@ void ScrollView::updateBackingStore()
bool ScrollView::inWindow() const
{
- // Needed for back/forward cache.
- notImplemented();
- return true;
+ WidgetClientWin* c = static_cast<WidgetClientWin*>(client());
+ if (!c)
+ return false;
+
+ return !c->isHidden();
}
void ScrollView::attachToWindow()
diff --git a/webkit/port/platform/WidgetClientWin.h b/webkit/port/platform/WidgetClientWin.h
index 40355cc..48d1db5 100644
--- a/webkit/port/platform/WidgetClientWin.h
+++ b/webkit/port/platform/WidgetClientWin.h
@@ -65,6 +65,9 @@ public:
// tickmark resides in another frame) this function returns kNoTickmark.
static const size_t kNoTickmark = -1;
virtual size_t getActiveTickmarkIndex(WebCore::Frame* frame) = 0;
+
+ // Returns true if this widget is hidden because it's in a background tab.
+ virtual bool isHidden() = 0;
};
} // namespace WebCore