summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/WebKit')
-rw-r--r--third_party/WebKit/Source/modules/modules.gypi1
-rw-r--r--third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp4
-rw-r--r--third_party/WebKit/Source/modules/presentation/PresentationAvailability.h6
-rw-r--r--third_party/WebKit/Source/modules/presentation/PresentationAvailabilityTest.cpp55
-rw-r--r--third_party/WebKit/Source/platform/blink_platform.gypi1
-rw-r--r--third_party/WebKit/Source/platform/exported/WebPresentationAvailabilityObserver.cpp12
-rw-r--r--third_party/WebKit/public/platform/modules/presentation/WebPresentationAvailabilityObserver.h3
7 files changed, 76 insertions, 6 deletions
diff --git a/third_party/WebKit/Source/modules/modules.gypi b/third_party/WebKit/Source/modules/modules.gypi
index 8cbe2bab..855af39 100644
--- a/third_party/WebKit/Source/modules/modules.gypi
+++ b/third_party/WebKit/Source/modules/modules.gypi
@@ -1815,6 +1815,7 @@
'indexeddb/IDBTransactionTest.cpp',
'mediastream/RTCDataChannelTest.cpp',
'notifications/NotificationDataTest.cpp',
+ 'presentation/PresentationAvailabilityTest.cpp',
'serviceworkers/ServiceWorkerContainerTest.cpp',
'webaudio/AudioBasicProcessorHandlerTest.cpp',
'webaudio/ConvolverNodeTest.cpp',
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp
index a9ce847..17b5b0f 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp
@@ -103,6 +103,8 @@ void PresentationAvailability::stop()
void PresentationAvailability::pageVisibilityChanged()
{
+ if (m_state == State::Inactive)
+ return;
updateListening();
}
@@ -141,4 +143,4 @@ DEFINE_TRACE(PresentationAvailability)
ActiveDOMObject::trace(visitor);
}
-} // namespace
+} // blink namespace
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h
index 82e1f7d..07c302f 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h
+++ b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h
@@ -8,6 +8,7 @@
#include "core/dom/ActiveDOMObject.h"
#include "core/events/EventTarget.h"
#include "core/page/PageLifecycleObserver.h"
+#include "modules/ModulesExport.h"
#include "platform/weborigin/KURL.h"
#include "public/platform/WebURL.h"
#include "public/platform/modules/presentation/WebPresentationAvailabilityObserver.h"
@@ -21,7 +22,7 @@ class ScriptPromiseResolver;
// object will be initialized with a default value passed via ::take() and will
// then subscribe to receive callbacks if the status for |url| were to
// change. The object will only listen to changes when required.
-class PresentationAvailability final
+class MODULES_EXPORT PresentationAvailability final
: public RefCountedGarbageCollectedEventTargetWithInlineData<PresentationAvailability>
, public ActiveDOMObject
, public PageLifecycleObserver
@@ -30,9 +31,6 @@ class PresentationAvailability final
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PresentationAvailability);
DEFINE_WRAPPERTYPEINFO();
public:
- // For CallbackPromiseAdapter.
- using WebType = bool;
-
static PresentationAvailability* take(ScriptPromiseResolver*, const KURL&, bool);
~PresentationAvailability() override;
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationAvailabilityTest.cpp b/third_party/WebKit/Source/modules/presentation/PresentationAvailabilityTest.cpp
new file mode 100644
index 0000000..7f56c10
--- /dev/null
+++ b/third_party/WebKit/Source/modules/presentation/PresentationAvailabilityTest.cpp
@@ -0,0 +1,55 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "config.h"
+#include "modules/presentation/PresentationAvailability.h"
+
+#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "bindings/core/v8/V8BindingForTesting.h"
+#include "core/frame/LocalFrame.h"
+#include "core/page/Page.h"
+#include "core/testing/DummyPageHolder.h"
+#include "platform/testing/URLTestHelpers.h"
+#include "platform/weborigin/KURL.h"
+#include <gtest/gtest.h>
+#include <v8.h>
+
+namespace blink {
+namespace {
+
+class PresentationAvailabilityTest : public ::testing::Test {
+public:
+ PresentationAvailabilityTest()
+ : m_scope(v8::Isolate::GetCurrent())
+ , m_page(DummyPageHolder::create())
+ {
+ }
+
+ void SetUp() override
+ {
+ m_scope.scriptState()->setExecutionContext(&m_page->document());
+ }
+
+ Page& page() { return m_page->page(); }
+ LocalFrame& frame() { return m_page->frame(); }
+ ScriptState* scriptState() { return m_scope.scriptState(); }
+
+private:
+ V8TestingScope m_scope;
+ OwnPtr<DummyPageHolder> m_page;
+};
+
+TEST_F(PresentationAvailabilityTest, NoPageVisibilityChangeAfterDetach)
+{
+ const KURL url = URLTestHelpers::toKURL("https://example.com");
+ Persistent<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState());
+ Persistent<PresentationAvailability> availability = PresentationAvailability::take(resolver, url, false);
+
+ // These two calls should not crash.
+ frame().detach(FrameDetachType::Remove);
+ page().setVisibilityState(PageVisibilityStateHidden, false);
+}
+
+} // anonymous namespace
+} // namespace blink
diff --git a/third_party/WebKit/Source/platform/blink_platform.gypi b/third_party/WebKit/Source/platform/blink_platform.gypi
index 7a63b3e..add90dd 100644
--- a/third_party/WebKit/Source/platform/blink_platform.gypi
+++ b/third_party/WebKit/Source/platform/blink_platform.gypi
@@ -307,6 +307,7 @@
'exported/WebPasswordCredential.cpp',
'exported/WebPrerender.cpp',
'exported/WebPrerenderingSupport.cpp',
+ 'exported/WebPresentationAvailabilityObserver.cpp',
'exported/WebPresentationController.cpp',
'exported/WebProcessMemoryDump.cpp',
'exported/WebRTCConfiguration.cpp',
diff --git a/third_party/WebKit/Source/platform/exported/WebPresentationAvailabilityObserver.cpp b/third_party/WebKit/Source/platform/exported/WebPresentationAvailabilityObserver.cpp
new file mode 100644
index 0000000..eb98ae9
--- /dev/null
+++ b/third_party/WebKit/Source/platform/exported/WebPresentationAvailabilityObserver.cpp
@@ -0,0 +1,12 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "config.h"
+#include "public/platform/modules/presentation/WebPresentationAvailabilityObserver.h"
+
+// This WebPresentationAvailabilityObserver.cpp, which includes only config.h
+// and WebPresentationAvailabilityObserver.h, should be in
+// Source/platform/exported, because WebPresentationAvailabilityObserver is not
+// compiled without this cpp. So if we don't have this cpp, we will see
+// unresolved symbol error when constructor/destructor's address is required.
diff --git a/third_party/WebKit/public/platform/modules/presentation/WebPresentationAvailabilityObserver.h b/third_party/WebKit/public/platform/modules/presentation/WebPresentationAvailabilityObserver.h
index e70e766..49d6835 100644
--- a/third_party/WebKit/public/platform/modules/presentation/WebPresentationAvailabilityObserver.h
+++ b/third_party/WebKit/public/platform/modules/presentation/WebPresentationAvailabilityObserver.h
@@ -5,6 +5,7 @@
#ifndef WebPresentationAvailabilityObserver_h
#define WebPresentationAvailabilityObserver_h
+#include "public/platform/WebCommon.h"
#include "public/platform/WebURL.h"
namespace blink {
@@ -12,7 +13,7 @@ namespace blink {
// WebPresentationAvailabilityObserver is an interface that is implemented by
// objects that wish to be notified when there is a presentation display
// availability change for a given URL.
-class WebPresentationAvailabilityObserver {
+class BLINK_PLATFORM_EXPORT WebPresentationAvailabilityObserver {
public:
virtual ~WebPresentationAvailabilityObserver() = default;