ChangeLog

 12011-02-10 Shishir Agrawal <shishir@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement Page Visibility API.
 6 https://bugs.webkit.org/show_bug.cgi?id=54181
 7
 8 * configure.ac:
 9
1102011-02-10 Peter Varga <pvarga@webkit.org>
211
312 Reviewed by Csaba Osztrogonác.

Source/JavaScriptCore/ChangeLog

 12011-02-10 Shishir Agrawal <shishir@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement Page Visibility API.
 6 https://bugs.webkit.org/show_bug.cgi?id=54181
 7
 8 * Configurations/FeatureDefines.xcconfig: Add ENABLE_PAGE_VISIBILITY_API.
 9
1102011-02-13 Cameron Zwarich <zwarich@apple.com>
211
312 Reviewed by Dan Bernstein.

Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig

@@ENABLE_MATHML = ENABLE_MATHML;
8989ENABLE_METER_TAG = ENABLE_METER_TAG;
9090ENABLE_NOTIFICATIONS = ;
9191ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
 92ENABLE_PAGE_VISIBILITY_API = ;
9293ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
9394
9495ENABLE_REGISTER_PROTOCOL_HANDLER = ;

@@ENABLE_XHTMLMP = ;
125126ENABLE_XPATH = ENABLE_XPATH;
126127ENABLE_XSLT = ENABLE_XSLT;
127128
128 FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
 129FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);

Source/WebCore/ChangeLog

 12011-02-10 Shishir Agrawal <shishir@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement Page Visibility API.
 6 https://bugs.webkit.org/show_bug.cgi?id=54181
 7
 8 No new tests. (OOPS!)
 9
 10 * WebCore.exp.in:
 11 * Configurations/FeatureDefines.xcconfig: Add ENABLE_PAGE_VISIBILITY_API.
 12 * dom/Document.cpp:
 13 (WebCore::Document::visibilityState): Returns document visibility state.
 14 (WebCore::Document::visible): Returns true iff document is visible.
 15 (WebCore::Document::triggerVisibilityChangeEvent): Triggers document visibility change event.
 16 (WebCore::Document::isVisibilityStateValueValid): Returns true if input visibility value is valid.
 17 * dom/Document.h: Added functions for document visibilty properties and visibility change events.
 18 * dom/Document.idl: Added new document properties: visible (bool) and visibilityState (DOMString).
 19 * dom/EventNames.h: Added visibilitychangeevent.
 20 * page/Frame.cpp:
 21 (WebCore::Frame::triggerVisibilityChangeEvent): Triggers visibility change in document and all
 22 child frames.
 23 * page/Frame.h: ditto.
 24 * page/Page.cpp:
 25 (WebCore::Page::Page): Take initial visiblity state as input param.
 26 (WebCore::Page::setVisibilityState): Sets visibility state.
 27 (WebCore::Page::visibilityState): Retursn current visibility state.
 28 * page/Page.h: ditto.
 29 * svg/graphics/SVGImage.cpp:
 30 (WebCore::SVGImage::dataChanged): Pass initial visibility to Page constructor.
 31
1322011-02-12 Sam Weinig <sam@webkit.org>
233
334 Reviewed by Dan Bernstein.

Source/WebCore/Configurations/FeatureDefines.xcconfig

@@ENABLE_MATHML = ENABLE_MATHML;
8989ENABLE_METER_TAG = ENABLE_METER_TAG;
9090ENABLE_NOTIFICATIONS = ;
9191ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
 92ENABLE_PAGE_VISIBILITY_API = ;
9293ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
9394
9495ENABLE_REGISTER_PROTOCOL_HANDLER = ;

@@ENABLE_XHTMLMP = ;
125126ENABLE_XPATH = ENABLE_XPATH;
126127ENABLE_XSLT = ENABLE_XSLT;
127128
128 FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
 129FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);

Source/WebCore/WebCore.exp.in

@@__ZN7WebCore4Page6goBackEv
660660__ZN7WebCore4Page8goToItemEPNS_11HistoryItemENS_13FrameLoadTypeE
661661__ZN7WebCore4Page9goForwardEv
662662__ZN7WebCore4Page9initGroupEv
663 __ZN7WebCore4PageC1ERKNS0_11PageClientsE
664663__ZN7WebCore4PageD1Ev
665664__ZN7WebCore4Path14addRoundedRectERKNS_9FloatRectERKNS_9FloatSizeE
666665__ZN7WebCore4PathC1Ev

@@__ZN7WebCore8Document12updateLayoutEv
17201719__ZNK7WebCore4Node16traverseNextNodeEPKS0_
17211720#endif
17221721
 1722#if ENABLE(PAGE_VISIBILITY_API)
 1723__ZN7WebCore4PageC1ERKNS0_11PageClientsERKN3WTF6StringE
 1724#else
 1725__ZN7WebCore4PageC1ERKNS0_11PageClientsE
 1726#endif
 1727
17231728#if ENABLE(OFFLINE_WEB_APPLICATIONS)
17241729__ZN7WebCore23ApplicationCacheStorage14quotaForOriginEPKNS_14SecurityOriginERx
17251730__ZN7WebCore23ApplicationCacheStorage14setMaximumSizeEx

Source/WebCore/dom/Document.cpp

@@void Document::removeTitle(Element* titleElement)
13781378 }
13791379}
13801380
 1381#if ENABLE(PAGE_VISIBILITY_API)
 1382String Document::visibilityState() const
 1383{
 1384 if (!m_frame || !m_frame->page())
 1385 return "visible";
 1386 return m_frame->page()->visibilityState();
 1387}
 1388
 1389bool Document::visible() const
 1390{
 1391 return visibilityState() == "visible";
 1392}
 1393
 1394void Document::triggerVisibilityChangeEvent()
 1395{
 1396 dispatchEvent(Event::create(eventNames().visibilitychangeEvent, false, false));
 1397}
 1398
 1399bool Document::isVisibilityStateValueValid(const String& visibilityState)
 1400{
 1401 if (visibilityState == "visible" || visibilityState == "hidden")
 1402 return true;
 1403 return false;
 1404}
 1405#endif
 1406
13811407String Document::nodeName() const
13821408{
13831409 return "#document";

Source/WebCore/dom/Document.h

@@public:
299299#if ENABLE(FULLSCREEN_API)
300300 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitfullscreenchange);
301301#endif
 302#if ENABLE(PAGE_VISIBILITY_API)
 303 DEFINE_ATTRIBUTE_EVENT_LISTENER(visibilitychange);
 304#endif
302305
303306 ViewportArguments viewportArguments() const { return m_viewportArguments; }
304307

@@public:
375378
376379 virtual KURL baseURI() const;
377380
 381#if ENABLE(PAGE_VISIBILITY_API)
 382 String visibilityState() const;
 383 bool visible() const;
 384 void triggerVisibilityChangeEvent();
 385 static bool isVisibilityStateValueValid(const String&);
 386#endif
 387
378388 PassRefPtr<Node> adoptNode(PassRefPtr<Node> source, ExceptionCode&);
379389
380390 PassRefPtr<HTMLCollection> images();

Source/WebCore/dom/Document.idl

@@module core {
342342 boolean isHTMLDocument();
343343#endif
344344
 345#if defined(ENABLE_PAGE_VISIBILITY_API) && ENABLE_PAGE_VISIBILITY_API
 346 readonly attribute DOMString visibilityState;
 347 readonly attribute boolean visible;
 348#endif
 349
345350 };
346351
347352}

Source/WebCore/dom/EventNames.h

@@namespace WebCore {
105105 macro(textInput) \
106106 macro(unload) \
107107 macro(updateready) \
 108 macro(visibilitychange) \
108109 macro(write) \
109110 macro(writeend) \
110111 macro(writestart) \

Source/WebCore/page/Frame.cpp

@@void Frame::setDOMWindow(DOMWindow* domWindow)
675675 m_domWindow = domWindow;
676676}
677677
 678#if ENABLE(PAGE_VISIBILITY_API)
 679void Frame::triggerVisibilityChangeEvent()
 680{
 681 if (m_doc)
 682 m_doc->triggerVisibilityChangeEvent();
 683 for (Frame* child = tree()->firstChild(); child; child = child->tree()->nextSibling())
 684 child->triggerVisibilityChangeEvent();
 685}
 686#endif
 687
678688DOMWindow* Frame::domWindow() const
679689{
680690 if (!m_domWindow)

Source/WebCore/page/Frame.h

@@namespace WebCore {
118118
119119 void transferChildFrameToNewDocument();
120120
 121#if ENABLE(PAGE_VISIBILITY_API)
 122 void triggerVisibilityChangeEvent();
 123#endif
 124
121125 // ======== All public functions below this point are candidates to move out of Frame into another class. ========
122126
123127 bool isDisconnected() const;

Source/WebCore/page/Page.cpp

@@static void networkStateChanged()
116116 frames[i]->document()->dispatchWindowEvent(Event::create(eventName, false, false));
117117}
118118
119 Page::Page(const PageClients& pageClients)
 119Page::Page(const PageClients& pageClients
 120#if ENABLE(PAGE_VISIBILITY_API)
 121 , const String& initialVisibilityState
 122#endif
 123)
120124 : m_chrome(adoptPtr(new Chrome(this, pageClients.chromeClient)))
121125 , m_dragCaretController(adoptPtr(new SelectionController(0, true)))
122126#if ENABLE(DRAG_SUPPORT)

@@Page::Page(const PageClients& pageClients)
161165 , m_customHTMLTokenizerChunkSize(-1)
162166 , m_canStartMedia(true)
163167 , m_viewMode(ViewModeWindowed)
 168#if ENABLE(PAGE_VISIBILITY_API)
 169 , m_visibilityState(initialVisibilityState)
 170#endif
164171{
165172 if (!allPages) {
166173 allPages = new HashSet<Page*>;

@@void Page::checkFrameCountConsistency() const
906913}
907914#endif
908915
 916#if ENABLE(PAGE_VISIBILITY_API)
 917void Page::setVisibilityState(const String& visibilityState)
 918{
 919 if (!Document::isVisibilityStateValueValid(visibilityState))
 920 return;
 921 if (m_visibilityState == visibilityState)
 922 return;
 923 m_visibilityState = visibilityState;
 924
 925 if (m_mainFrame)
 926 m_mainFrame->triggerVisibilityChangeEvent();
 927}
 928
 929String Page::visibilityState() const
 930{
 931 return m_visibilityState;
 932}
 933#endif
 934
909935Page::PageClients::PageClients()
910936 : chromeClient(0)
911937 , contextMenuClient(0)

Source/WebCore/page/Page.h

@@namespace WebCore {
115115 SpeechInputClient* speechInputClient;
116116 };
117117
118  Page(const PageClients&);
 118 Page(const PageClients&
 119#if ENABLE(PAGE_VISIBILITY_API)
 120 , const String& initialVisibilityState="visible"
 121#endif
 122 );
119123 ~Page();
120124
121125 RenderTheme* theme() const { return m_theme.get(); };

@@namespace WebCore {
287291 // recursive frameset pages can quickly bring the program to its knees
288292 // with exponential growth in the number of frames.
289293 static const int maxNumberOfFrames = 1000;
 294
 295#if ENABLE(PAGE_VISIBILITY_API)
 296 String visibilityState() const;
 297 void setVisibilityState(const String&);
 298#endif
 299
290300 private:
291301 void initGroup();
292302

@@namespace WebCore {
386396 ViewMode m_viewMode;
387397
388398 ViewportArguments m_viewportArguments;
 399
 400#if ENABLE(PAGE_VISIBILITY_API)
 401 String m_visibilityState;
 402#endif
 403
389404 };
390405
391406} // namespace WebCore

Source/WebCore/svg/graphics/SVGImage.cpp

@@bool SVGImage::dataChanged(bool allDataReceived)
265265 // FIXME: If this SVG ends up loading itself, we might leak the world.
266266 // The comment said that the Cache code does not know about CachedImages
267267 // holding Frames and won't know to break the cycle. But
268  m_page.set(new Page(pageClients));
 268 m_page.set(new Page(pageClients
 269#if ENABLE(PAGE_VISIBILITY_API)
 270 , "visible"
 271#endif
 272 ));
269273 m_page->settings()->setMediaEnabled(false);
270274 m_page->settings()->setJavaScriptEnabled(false);
271275 m_page->settings()->setPluginsEnabled(false);

Source/WebKit/chromium/ChangeLog

 12011-02-10 Shishir Agrawal <shishir@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement Page Visibility API.
 6 https://bugs.webkit.org/show_bug.cgi?id=54181
 7
 8 * features.gypi:
 9 * public/WebView.h: Added function to set visibilty state.
 10 * public/WebViewClient.h:
 11 (WebKit::WebViewClient::visibilityState): Returns visibility state.
 12 * src/WebViewImpl.cpp:
 13 (WebKit::WebViewImpl::WebViewImpl): Pass initial visibility to Page constructor.
 14 (WebKit::WebViewImpl::setVisibilityState): Set visibility state of the underlying Page.
 15 * src/WebViewImpl.h: ditto.
 16
1172011-02-11 Zhenyao Mo <zmo@google.com>
218
319 Reviewed by Kenneth Russell.

Source/WebKit/chromium/features.gypi

6969 'ENABLE_OFFLINE_WEB_APPLICATIONS=1',
7070 'ENABLE_OPENTYPE_SANITIZER=1',
7171 'ENABLE_ORIENTATION_EVENTS=0',
 72 'ENABLE_PAGE_VISIBILITY_API=1',
7273 'ENABLE_PROGRESS_TAG=1',
7374 'ENABLE_REGISTER_PROTOCOL_HANDLER=0',
7475 'ENABLE_REQUEST_ANIMATION_FRAME=1',

Source/WebKit/chromium/public/WebView.h

@@public:
364364 // APIs.
365365 virtual WebGraphicsContext3D* graphicsContext3D() = 0;
366366
 367 // Visibility -----------------------------------------------------------
 368
 369#if defined(ENABLE_PAGE_VISIBILITY_API) && ENABLE_PAGE_VISIBILITY_API
 370 // Sets the visibility of the WebView.
 371 virtual void setVisibilityState(const WebString&) = 0;
 372#endif
 373
367374protected:
368375 ~WebView() {}
369376};

Source/WebKit/chromium/public/WebViewClient.h

@@public:
336336 const WebString& url,
337337 const WebString& title) { }
338338
 339 // Visibility -----------------------------------------------------------
 340
 341#if defined(ENABLE_PAGE_VISIBILITY_API) && ENABLE_PAGE_VISIBILITY_API
 342 // Current visibility.
 343 virtual WebString visibilityState() const { return WebString("visible"); }
 344#endif
 345
339346protected:
340347 ~WebViewClient() { }
341348};

Source/WebKit/chromium/src/WebViewImpl.cpp

@@WebViewImpl::WebViewImpl(WebViewClient* client, WebDevToolsAgentClient* devTools
336336 pageClients.geolocationClient = m_geolocationClientProxy.get();
337337 pageClients.backForwardClient = BackForwardListChromium::create(this);
338338
339  m_page.set(new Page(pageClients));
 339 m_page.set(new Page(pageClients
 340#if defined(ENABLE_PAGE_VISIBILITY_API) && ENABLE_PAGE_VISIBILITY_API
 341 , m_client->visibilityState()
 342#endif
 343 ));
340344
341345 m_geolocationClientProxy->setController(m_page->geolocationController());
342346

@@void WebViewImpl::fullFramePluginZoomLevelChanged(double zoomLevel)
16381642 m_client->zoomLevelChanged();
16391643}
16401644
 1645#if defined(ENABLE_PAGE_VISIBILITY_API) && ENABLE_PAGE_VISIBILITY_API
 1646void WebViewImpl::setVisibilityState(const WebString& visibilityState)
 1647{
 1648 if (!m_page)
 1649 return;
 1650 m_page->setVisibilityState(visibilityState);
 1651}
 1652#endif
 1653
16411654double WebView::zoomLevelToZoomFactor(double zoomLevel)
16421655{
16431656 return std::pow(textSizeMultiplierRatio, zoomLevel);

Source/WebKit/chromium/src/WebViewImpl.h

@@public:
357357 // a plugin can update its own zoom, say because of its own UI.
358358 void fullFramePluginZoomLevelChanged(double zoomLevel);
359359
 360#if defined(ENABLE_PAGE_VISIBILITY_API) && ENABLE_PAGE_VISIBILITY_API
 361 virtual void setVisibilityState(const WebString&);
 362#endif
 363
360364private:
361365 friend class WebView; // So WebView::Create can call our constructor
362366 friend class WTF::RefCounted<WebViewImpl>;

Source/WebKit/mac/ChangeLog

 12011-02-10 Shishir Agrawal <shishir@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement Page Visibility API.
 6 https://bugs.webkit.org/show_bug.cgi?id=54181
 7
 8 * Configurations/FeatureDefines.xcconfig: Add ENABLE_PAGE_VISIBILITY_API.
 9
1102011-02-11 Geoffrey Garen <ggaren@apple.com>
211
312 Reviewed by Oliver Hunt.

Source/WebKit/mac/Configurations/FeatureDefines.xcconfig

@@ENABLE_MATHML = ENABLE_MATHML;
8989ENABLE_METER_TAG = ENABLE_METER_TAG;
9090ENABLE_NOTIFICATIONS = ;
9191ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
 92ENABLE_PAGE_VISIBILITY_API = ;
9293ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
9394
9495ENABLE_REGISTER_PROTOCOL_HANDLER = ;

@@ENABLE_XHTMLMP = ;
125126ENABLE_XPATH = ENABLE_XPATH;
126127ENABLE_XSLT = ENABLE_XSLT;
127128
128 FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
 129FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);

Source/WebKit2/ChangeLog

 12011-02-10 Shishir Agrawal <shishir@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement Page Visibility API.
 6 https://bugs.webkit.org/show_bug.cgi?id=54181
 7
 8 * Configurations/FeatureDefines.xcconfig: Add ENABLE_PAGE_VISIBILITY_API.
 9
1102011-02-11 Alexey Proskuryakov <ap@apple.com>
211
312 Reviewed by Anders Carlsson.

Source/WebKit2/Configurations/FeatureDefines.xcconfig

@@ENABLE_MATHML = ENABLE_MATHML;
8989ENABLE_METER_TAG = ENABLE_METER_TAG;
9090ENABLE_NOTIFICATIONS = ;
9191ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
 92ENABLE_PAGE_VISIBILITY_API = ;
9293ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
9394
9495ENABLE_REGISTER_PROTOCOL_HANDLER = ;

@@ENABLE_XHTMLMP = ;
125126ENABLE_XPATH = ENABLE_XPATH;
126127ENABLE_XSLT = ENABLE_XSLT;
127128
128 FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
 129FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);

Tools/ChangeLog

 12011-02-10 Shishir Agrawal <shishir@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement Page Visibility API.
 6 https://bugs.webkit.org/show_bug.cgi?id=54181
 7
 8 * Scripts/build-webkit: Add --page-visibility-api flag.
 9
1102011-02-12 Chang Shu <cshu@webkit.org>
211
312 Unreviewed.

Tools/Scripts/build-webkit

@@my (
9191 $notificationsSupport,
9292 $offlineWebApplicationSupport,
9393 $orientationEventsSupport,
 94 $pageVisibilityApiSupport,
9495 $progressTagSupport,
9596 $registerProtocolHandlerSupport,
9697 $sharedWorkersSupport,

@@my @features = (
214215 { option => "orientation-events", desc => "Toggle Orientation Events support",
215216 define => "ENABLE_ORIENTATION_EVENTS", default => 0, value => \$orientationEventsSupport },
216217
 218 { option => "page-visibility-api", desc => "Page Visibility API support",
 219 define => "ENABLE_PAGE_VISIBILITY_API", default => 0, value => \$pageVisibilityApiSupport },
 220
217221 { option => "progress-tag", desc => "Progress Tag support",
218222 define => "ENABLE_PROGRESS_TAG", default => 1, value => \$progressTagSupport },
219223

configure.ac

@@AC_ARG_ENABLE(mathml,
523523 [],[enable_mathml="no"])
524524AC_MSG_RESULT([$enable_mathml])
525525
 526# check whether to enable page visibility API.
 527AC_MSG_CHECKING([whether to enable Page Visibility API support])
 528AC_ARG_ENABLE(page_visibility_api,
 529 AC_HELP_STRING([--enable-page-visibility-api],
 530 [enable page visibility api[default=no]]),
 531 [],[enable_page_visibility_api="no"])
 532AC_MSG_RESULT([$enable_page_visibility_api])
 533
526534# check whether to enable SVG support
527535AC_MSG_CHECKING([whether to enable SVG support])
528536AC_ARG_ENABLE(svg,

@@AM_CONDITIONAL([ENABLE_MEDIA_STATISTICS],[test "$enable_media_statistics" = "yes
971979AM_CONDITIONAL([ENABLE_FULLSCREEN_API],[test "$enable_fullscreen_api" = "yes"])
972980AM_CONDITIONAL([ENABLE_NOTIFICATIONS],[test "$enable_notifications" = "yes"])
973981AM_CONDITIONAL([ENABLE_ORIENTATION_EVENTS],[test "$enable_orientation_events" = "yes"])
 982AM_CONDITIONAL([ENABLE_PAGE_VISIBILITY_API],[test "$enable_page_visibility_apis" = "yes"])
974983AM_CONDITIONAL([ENABLE_SVG],[test "$enable_svg" = "yes"])
975984AM_CONDITIONAL([ENABLE_SVG_ANIMATION],[test "$enable_svg_animation" = "yes"])
976985AM_CONDITIONAL([ENABLE_SVG_FONTS],[test "$enable_svg_fonts" = "yes"])

@@Features:
10571066 Image resizer support : $enable_image_resizer
10581067 Link prefetch support : $enable_link_prefetch
10591068 Opcode stats : $enable_opcode_stats
 1069 Page visibility API support : $enable_page_visibility_api
10601070 SharedWorkers support : $enable_shared_workers
10611071 Speech input support : $enable_input_speech
10621072 SVG support : $enable_svg