Commit 44ed12ac authored by Alberto Garcia's avatar Alberto Garcia
Browse files

Update upstream source from tag 'upstream/2.30.5'

Update to upstream version '2.30.5'
with Debian dir e4ece9676737f04c6d5eb14f9b639f266d3af33d
parents fa6dfa3b bca2bbd4
......@@ -14,7 +14,7 @@
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">JavaScriptCore GLib Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">for JavaScriptCore 2.30.4</p></div>
<div><p class="releaseinfo">for JavaScriptCore 2.30.5</p></div>
</div>
<hr>
</div>
......
......@@ -175,7 +175,7 @@ have included when compiling your code.</p>
<hr>
<div class="refsect2">
<a name="JSC-MICRO-VERSION:CAPS"></a><h3>JSC_MICRO_VERSION</h3>
<pre class="programlisting">#define JSC_MICRO_VERSION (4)
<pre class="programlisting">#define JSC_MICRO_VERSION (5)
</pre>
</div>
</div>
......
......@@ -14,7 +14,7 @@
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKitGTK Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">for WebKitGTK 2.30.4</p></div>
<div><p class="releaseinfo">for WebKitGTK 2.30.5</p></div>
</div>
<hr>
</div>
......
......@@ -213,7 +213,7 @@ against at application run time.</p>
<hr>
<div class="refsect2">
<a name="WEBKIT-MICRO-VERSION:CAPS"></a><h3>WEBKIT_MICRO_VERSION</h3>
<pre class="programlisting">#define WEBKIT_MICRO_VERSION (4)
<pre class="programlisting">#define WEBKIT_MICRO_VERSION (5)
</pre>
<p>Like <a class="link" href="webkit2gtk-4.0-WebKitVersion.html#webkit-get-micro-version" title="webkit_get_micro_version ()"><code class="function">webkit_get_micro_version()</code></a>, but from the headers used at
application compile time, rather than from the library linked
......
......@@ -14,7 +14,7 @@
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKitDOMGTK+ Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">for WebKitDOMGTK+ 2.30.4</p></div>
<div><p class="releaseinfo">for WebKitDOMGTK+ 2.30.5</p></div>
</div>
<hr>
</div>
......
================
WebKitGTK 2.30.5
================
What's new in WebKitGTK 2.30.5?
- Bring back the WebKitPluginProcess intallation that was removed by mistake.
- Fix RunLoop objects leaked in worker threads.
- Fix aarch64 llint build with JIT disabled.
- Use Internet Explorer quirk for Google Docs.
================
WebKitGTK 2.30.4
================
......
......@@ -68,6 +68,10 @@ if (ENABLE_INTROSPECTION)
# Add required -L flags from ${CMAKE_SHARED_LINKER_FLAGS} for g-ir-scanner
string(REGEX MATCHALL "-L[^ ]*" INTROSPECTION_ADDITIONAL_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
if (${INTROSPECTION_HAVE_SOURCES_TOP_DIRS})
set(GIR_SOURCES_TOP_DIRS "--sources-top-dirs=${CMAKE_BINARY_DIR}")
endif ()
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir
DEPENDS JavaScriptCore
......@@ -88,6 +92,7 @@ if (ENABLE_INTROSPECTION)
--pkg=gobject-2.0
--pkg-export=javascriptcoregtk-${WEBKITGTK_API_VERSION}
--output=${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir
${GIR_SOURCES_TOP_DIRS}
--c-include="jsc/jsc.h"
-DJSC_COMPILATION
-I${CMAKE_SOURCE_DIR}/Source
......
......@@ -2571,7 +2571,7 @@ public:
intptr_t offset = (reinterpret_cast<intptr_t>(to) - reinterpret_cast<intptr_t>(where)) >> 2;
ASSERT(static_cast<int>(offset) == offset);
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
if (!isInt<26>(offset)) {
to = ExecutableAllocator::singleton().getJumpIslandTo(where, to);
offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(where)) >> 2;
......@@ -2769,7 +2769,7 @@ public:
cacheFlush(reinterpret_cast<int*>(from) - 1, sizeof(int));
}
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
static void* prepareForAtomicRelinkJumpConcurrently(void* from, void* to)
{
intptr_t offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(from)) >> 2;
......@@ -3019,7 +3019,7 @@ protected:
intptr_t offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(fromInstruction)) >> 2;
ASSERT(static_cast<int>(offset) == offset);
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
if (!isInt<26>(offset)) {
to = ExecutableAllocator::singleton().getJumpIslandTo(bitwise_cast<void*>(fromInstruction), to);
offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(fromInstruction)) >> 2;
......
......@@ -916,7 +916,7 @@ public:
template<PtrTag callTag, PtrTag destTag>
static CodeLocationLabel<destTag> prepareForAtomicRepatchNearCallConcurrently(CodeLocationNearCall<callTag> nearCall, CodeLocationLabel<destTag> destination)
{
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
switch (nearCall.callMode()) {
case NearCallMode::Tail:
return CodeLocationLabel<destTag>(tagCodePtr<destTag>(AssemblerType::prepareForAtomicRelinkJumpConcurrently(nearCall.dataLocation(), destination.dataLocation())));
......
......@@ -374,6 +374,7 @@ void LinkBuffer::copyCompactAndLinkCode(MacroAssembler& macroAssembler, JITCompi
m_executableMemory->shrink(m_size);
}
#if ENABLE(JIT)
if (useFastJITPermissions()) {
ASSERT(codeOutData == outData);
if (UNLIKELY(Options::dumpJITMemoryPath()))
......@@ -382,6 +383,10 @@ void LinkBuffer::copyCompactAndLinkCode(MacroAssembler& macroAssembler, JITCompi
ASSERT(codeOutData != outData);
performJITMemcpy(codeOutData, outData, m_size);
}
#else
ASSERT(codeOutData != outData);
performJITMemcpy(codeOutData, outData, m_size);
#endif
jumpsToLink.clear();
......
......@@ -81,7 +81,7 @@ static constexpr size_t fixedExecutableMemoryPoolSize = FIXED_EXECUTABLE_MEMORY_
#elif CPU(ARM)
static constexpr size_t fixedExecutableMemoryPoolSize = 16 * MB;
#elif CPU(ARM64)
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
static constexpr size_t fixedExecutableMemoryPoolSize = 1 * GB;
// These sizes guarantee that any jump within an island can jump forwards or backwards
// to the adjacent island in a single instruction.
......@@ -310,7 +310,7 @@ static ALWAYS_INLINE JITReservation initializeJITPageReservation()
return reservation;
reservation.size = fixedExecutableMemoryPoolSize;
#if !USE(JUMP_ISLANDS)
#if !ENABLE(JUMP_ISLANDS)
// FIXME: Consider making jump islands work with Options::jitMemoryReservationSize
// https://bugs.webkit.org/show_bug.cgi?id=209037
if (Options::jitMemoryReservationSize())
......@@ -359,14 +359,14 @@ static ALWAYS_INLINE JITReservation initializeJITPageReservation()
class FixedVMPoolExecutableAllocator final {
WTF_MAKE_FAST_ALLOCATED;
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
class Islands;
class RegionAllocator;
#endif
public:
FixedVMPoolExecutableAllocator()
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
: m_allocators(constructFixedSizeArrayWithArguments<RegionAllocator, numberOfRegions>(*this))
#else
: m_allocator(*this)
......@@ -375,7 +375,7 @@ public:
JITReservation reservation = initializeJITPageReservation();
m_reservation = WTFMove(reservation.pageReservation);
if (m_reservation) {
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
uintptr_t start = bitwise_cast<uintptr_t>(memoryStart());
uintptr_t reservationEnd = bitwise_cast<uintptr_t>(memoryEnd());
for (size_t i = 0; i < numberOfRegions; ++i) {
......@@ -415,7 +415,7 @@ public:
RefPtr<ExecutableMemoryHandle> allocate(size_t sizeInBytes)
{
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
auto locker = holdLock(getLock());
unsigned start = 0;
......@@ -434,7 +434,7 @@ public:
return nullptr;
#else
return m_allocator.allocate(sizeInBytes);
#endif // USE(JUMP_ISLANDS)
#endif // ENABLE(JUMP_ISLANDS)
}
Lock& getLock() { return m_lock; }
......@@ -467,7 +467,7 @@ public:
bool isInAllocatedMemory(const AbstractLocker& locker, void* address)
{
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
if (RegionAllocator* allocator = findRegion(bitwise_cast<uintptr_t>(address)))
return allocator->isInAllocatedMemory(locker, address);
return false;
......@@ -498,7 +498,7 @@ public:
return result;
}
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
void handleWillBeReleased(const LockHolder& locker, MetaAllocatorHandle& handle)
{
if (m_islandsForJumpSourceLocation.isEmpty())
......@@ -632,7 +632,7 @@ private:
return result;
}
#endif // USE(JUMP_ISLANDS)
#endif // ENABLE(JUMP_ISLANDS)
private:
class Allocator : public MetaAllocator {
......@@ -663,7 +663,7 @@ private:
FixedVMPoolExecutableAllocator& m_fixedAllocator;
};
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
class RegionAllocator final : public Allocator {
using Base = Allocator;
public:
......@@ -768,12 +768,12 @@ private:
void* m_end;
FastBitVector islandBits;
};
#endif // USE(JUMP_ISLANDS)
#endif // ENABLE(JUMP_ISLANDS)
template <typename Function>
void forEachAllocator(Function function)
{
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
for (RegionAllocator& allocator : m_allocators) {
using FunctionResultType = decltype(function(allocator));
if constexpr (std::is_same<IterationStatus, FunctionResultType>::value) {
......@@ -786,10 +786,10 @@ private:
}
#else
function(m_allocator);
#endif // USE(JUMP_ISLANDS)
#endif // ENABLE(JUMP_ISLANDS)
}
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
class Islands : public RedBlackTree<Islands, void*>::Node {
WTF_MAKE_FAST_ALLOCATED;
public:
......@@ -797,16 +797,16 @@ private:
CodeLocationLabel<ExecutableMemoryPtrTag> jumpSourceLocation;
Vector<CodeLocationLabel<ExecutableMemoryPtrTag>> jumpIslands;
};
#endif // USE(JUMP_ISLANDS)
#endif // ENABLE(JUMP_ISLANDS)
Lock m_lock;
PageReservation m_reservation;
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
std::array<RegionAllocator, numberOfRegions> m_allocators;
RedBlackTree<Islands, void*> m_islandsForJumpSourceLocation;
#else
Allocator m_allocator;
#endif // USE(JUMP_ISLANDS)
#endif // ENABLE(JUMP_ISLANDS)
};
// Keep this pointer in a mutable global variable to help Leaks find it.
......@@ -938,7 +938,7 @@ void ExecutableAllocator::dumpProfile()
}
#endif
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
void* ExecutableAllocator::getJumpIslandTo(void* from, void* newDestination)
{
FixedVMPoolExecutableAllocator* allocator = g_jscConfig.fixedVMPoolExecutableAllocator;
......
......@@ -178,7 +178,7 @@ public:
Lock& getLock() const;
#if USE(JUMP_ISLANDS)
#if ENABLE(JUMP_ISLANDS)
JS_EXPORT_PRIVATE void* getJumpIslandTo(void* from, void* newDestination);
JS_EXPORT_PRIVATE void* getJumpIslandToConcurrently(void* from, void* newDestination);
#endif
......
......@@ -599,6 +599,10 @@
#endif
#endif
#if !defined(ENABLE_JUMP_ISLANDS) && CPU(ARM64) && CPU(ADDRESS64) && ENABLE(JIT)
#define ENABLE_JUMP_ISLANDS 1
#endif
/* FIXME: This should be turned into an #error invariant */
/* The FTL *does not* work on 32-bit platforms. Disable it even if someone asked us to enable it. */
#if USE(JSVALUE32_64)
......@@ -870,7 +874,3 @@
#if ENABLE(WEBGL2) && !ENABLE(WEBGL)
#error "ENABLE(WEBGL2) requires ENABLE(WEBGL)"
#endif
#if CPU(ARM64) && CPU(ADDRESS64)
#define USE_JUMP_ISLANDS 1
#endif
......@@ -46,6 +46,11 @@ public:
{
}
~Holder()
{
m_runLoop->threadWillExit();
}
RunLoop& runLoop() { return m_runLoop; }
private:
......@@ -162,4 +167,10 @@ void RunLoop::suspendFunctionDispatchForCurrentCycle()
wakeUp();
}
void RunLoop::threadWillExit()
{
m_currentIteration.clear();
m_nextIteration.clear();
}
} // namespace WTF
......@@ -96,6 +96,8 @@ public:
enum class CycleResult { Continue, Stop };
WTF_EXPORT_PRIVATE CycleResult static cycle(RunLoopMode = DefaultRunLoopMode);
WTF_EXPORT_PRIVATE void threadWillExit();
#if USE(GLIB_EVENT_LOOP)
WTF_EXPORT_PRIVATE GMainContext* mainContext() const { return m_mainContext.get(); }
enum class Event { WillDispatch, DidDispatch };
......
......@@ -38,11 +38,6 @@ namespace WebCore {
static bool isGoogle(const URL& url)
{
String domain = url.host().toString();
// Google uses accounts.youtube.com for its login service.
if (domain == "accounts.youtube.com")
return true;
String baseDomain = topPrivatelyControlledDomain(domain);
// Our Google UA is *very* complicated to get right. Read
......@@ -98,11 +93,6 @@ static bool urlRequiresFirefoxBrowser(const URL& url)
{
String domain = url.host().toString();
// Google Drive shows an unsupported browser warning with WebKitGTK's
// standard user agent.
if (domain == "drive.google.com")
return true;
// Red Hat Bugzilla displays a warning page when performing searches with WebKitGTK's standard
// user agent.
if (domain == "bugzilla.redhat.com")
......@@ -111,6 +101,31 @@ static bool urlRequiresFirefoxBrowser(const URL& url)
return false;
}
static bool urlRequiresInternetExplorerBrowser(const URL& url)
{
String domain = url.host().toString();
// This quirk actually has nothing to do with YouTube. It's needed to avoid
// unsupported browser warnings on Google Docs. Why do we need this weird
// quirk? We cannot use Chrome or Firefox quirks because Google then uses
// features that don't work in WebKit. And we can't use our macOS platform
// quirk because Google then expects command keys and doesn't support basic
// keyboard shortcuts. We could pretend to be Edge, but adding Chromium is
// likely to break in the same way as a Chrome quirk. So that leaves us
// with IE browser as the final reasonable option. This will break
// eventually, but hopefully not for a long time, because we are probably
// out of options when it does.
if (domain == "accounts.youtube.com" || domain == "docs.google.com")
return true;
// Google Drive shows an unsupported browser warning with WebKitGTK's
// standard user agent.
if (domain == "drive.google.com")
return true;
return false;
}
static bool urlRequiresMacintoshPlatform(const URL& url)
{
String domain = url.host().toString();
......@@ -148,9 +163,14 @@ static bool urlRequiresMacintoshPlatform(const URL& url)
return false;
}
static bool urlRequiresWindowsPlatform(const URL& url)
{
return urlRequiresInternetExplorerBrowser(url);
}
static bool urlRequiresLinuxDesktopPlatform(const URL& url)
{
return isGoogle(url) && chassisType() != WTF::ChassisType::Mobile;
return isGoogle(url) && !urlRequiresInternetExplorerBrowser(url) && chassisType() != WTF::ChassisType::Mobile;
}
UserAgentQuirks UserAgentQuirks::quirksForURL(const URL& url)
......@@ -163,9 +183,13 @@ UserAgentQuirks UserAgentQuirks::quirksForURL(const URL& url)
quirks.add(UserAgentQuirks::NeedsChromeBrowser);
else if (urlRequiresFirefoxBrowser(url))
quirks.add(UserAgentQuirks::NeedsFirefoxBrowser);
else if (urlRequiresInternetExplorerBrowser(url))
quirks.add(UserAgentQuirks::NeedsInternetExplorerBrowser);
if (urlRequiresMacintoshPlatform(url))
quirks.add(UserAgentQuirks::NeedsMacintoshPlatform);
else if (urlRequiresWindowsPlatform(url))
quirks.add(UserAgentQuirks::NeedsWindowsPlatform);
else if (urlRequiresLinuxDesktopPlatform(url))
quirks.add(UserAgentQuirks::NeedsLinuxDesktopPlatform);
......@@ -180,8 +204,12 @@ String UserAgentQuirks::stringForQuirk(UserAgentQuirk quirk)
return "Chrome/86.0.4208.2"_s;
case NeedsFirefoxBrowser:
return "; rv:80.0) Gecko/20100101 Firefox/80.0"_s;
case NeedsInternetExplorerBrowser:
return "; Trident/7.0; rv:11.0) like Gecko"_s;
case NeedsMacintoshPlatform:
return "Macintosh; Intel Mac OS X 10_15"_s;
case NeedsWindowsPlatform:
return "Windows NT 10.0"_s;
case NeedsLinuxDesktopPlatform:
return "X11; Linux x86_64"_s;
case NumUserAgentQuirks:
......
......@@ -35,7 +35,9 @@ public:
enum UserAgentQuirk {
NeedsChromeBrowser,
NeedsFirefoxBrowser,
NeedsInternetExplorerBrowser,
NeedsMacintoshPlatform,
NeedsWindowsPlatform,
NeedsLinuxDesktopPlatform,
NumUserAgentQuirks
......
......@@ -25,9 +25,11 @@
#ifndef AudioSourceProviderClient_h
#define AudioSourceProviderClient_h
#include <wtf/WeakPtr.h>
namespace WebCore {
class AudioSourceProviderClient {
class AudioSourceProviderClient : public CanMakeWeakPtr<AudioSourceProviderClient, WeakPtrFactoryInitialization::Eager> {
public:
virtual void setFormat(size_t numberOfChannels, float sampleRate) = 0;
protected:
......
......@@ -127,15 +127,14 @@ AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer()
{
m_notifier->invalidate();
GRefPtr<GstElement> deinterleave = adoptGRef(gst_bin_get_by_name(GST_BIN(m_audioSinkBin.get()), "deinterleave"));
auto deinterleave = adoptGRef(gst_bin_get_by_name(GST_BIN_CAST(m_audioSinkBin.get()), "deinterleave"));
if (deinterleave && m_client) {
g_signal_handler_disconnect(deinterleave.get(), m_deinterleavePadAddedHandlerId);
g_signal_handler_disconnect(deinterleave.get(), m_deinterleaveNoMorePadsHandlerId);
g_signal_handler_disconnect(deinterleave.get(), m_deinterleavePadRemovedHandlerId);
}
if (m_pipeline)
gst_element_set_state(m_pipeline.get(), GST_STATE_NULL);
setClient(nullptr);
g_object_unref(m_frontLeftAdapter);
g_object_unref(m_frontRightAdapter);
......@@ -229,22 +228,26 @@ GstFlowReturn AudioSourceProviderGStreamer::handleAudioBuffer(GstAppSink* sink)
return GST_FLOW_OK;
}
void AudioSourceProviderGStreamer::setClient(AudioSourceProviderClient* client)
void AudioSourceProviderGStreamer::setClient(AudioSourceProviderClient* newClient)
{
if (m_client)
if (client() == newClient)
return;
ASSERT(client);
m_client = client;
m_client = makeWeakPtr(newClient);
if (m_pipeline)
gst_element_set_state(m_pipeline.get(), GST_STATE_PLAYING);
gst_element_set_state(m_pipeline.get(), m_client ? GST_STATE_PLAYING : GST_STATE_NULL);
// FIXME: This early return should ideally be replaced by a removal of the m_audioSinkBin from
// its parent pipeline. https://bugs.webkit.org/show_bug.cgi?id=219245
if (!m_client)
return;
// The volume element is used to mute audio playback towards the
// autoaudiosink. This is needed to avoid double playback of audio
// from our audio sink and from the WebAudio AudioDestination node
// supposedly configured already by application side.
GRefPtr<GstElement> volumeElement = adoptGRef(gst_bin_get_by_name(GST_BIN(m_audioSinkBin.get()), "volume"));
auto volumeElement = adoptGRef(gst_bin_get_by_name(GST_BIN_CAST(m_audioSinkBin.get()), "volume"));
if (volumeElement)
g_object_set(volumeElement.get(), "mute", TRUE, nullptr);
......@@ -375,11 +378,9 @@ void AudioSourceProviderGStreamer::handleRemovedDeinterleavePad(GstPad* pad)
void AudioSourceProviderGStreamer::deinterleavePadsConfigured()
{
m_notifier->notify(MainThreadNotification::DeinterleavePadsConfigured, [this] {
ASSERT(m_client);
ASSERT(m_deinterleaveSourcePads == gNumberOfChannels);
m_client->setFormat(m_deinterleaveSourcePads, gSampleBitRate);
m_notifier->notify(MainThreadNotification::DeinterleavePadsConfigured, [numberOfChannels = m_deinterleaveSourcePads, sampleRate = gSampleBitRate, client = m_client] {
if (client)
client->setFormat(numberOfChannels, sampleRate);
});
}
......
......@@ -22,6 +22,7 @@
#if ENABLE(WEB_AUDIO) && ENABLE(VIDEO) && USE(GSTREAMER)
#include "AudioSourceProvider.h"
#include "AudioSourceProviderClient.h"
#include "GRefPtrGStreamer.h"
#include "MainThreadNotifier.h"
#include <gst/gst.h>
......@@ -61,7 +62,7 @@ public:
void provideInput(AudioBus*, size_t framesToProcess) override;
void setClient(AudioSourceProviderClient*) override;
const AudioSourceProviderClient* client() const { return m_client; }
const AudioSourceProviderClient* client() const { return m_client.get(); }
void handleNewDeinterleavePad(GstPad*);
void deinterleavePadsConfigured();
......@@ -78,7 +79,7 @@ private:
};
Ref<MainThreadNotifier<MainThreadNotification>> m_notifier;
GRefPtr<GstElement> m_audioSinkBin;
AudioSourceProviderClient* m_client;
WeakPtr<AudioSourceProviderClient> m_client;
int m_deinterleaveSourcePads;
GstAdapter* m_frontLeftAdapter;
GstAdapter* m_frontRightAdapter;
......
......@@ -89,6 +89,8 @@ static String buildUserAgentString(const UserAgentQuirks& quirks)
if (quirks.contains(UserAgentQuirks::NeedsMacintoshPlatform))
uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsMacintoshPlatform));
else if (quirks.contains(UserAgentQuirks::NeedsWindowsPlatform))
uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsWindowsPlatform));
else if (quirks.contains(UserAgentQuirks::NeedsLinuxDesktopPlatform))
uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsLinuxDesktopPlatform));
else {
......@@ -104,6 +106,10 @@ static String buildUserAgentString(const UserAgentQuirks& quirks)
uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsFirefoxBrowser));
return uaString.toString();
}
if (quirks.contains(UserAgentQuirks::NeedsInternetExplorerBrowser)) {
uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsInternetExplorerBrowser));
return uaString.toString();
}
uaString.appendLiteral(") AppleWebKit/");
uaString.append(versionForUAString());
......
......@@ -577,4 +577,8 @@ else ()
LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
RUNTIME DESTINATION "${LIBEXEC_INSTALL_DIR}"
)
if (ENABLE_PLUGIN_PROCESS)
install(TARGETS PluginProcess DESTINATION "${LIBEXEC_INSTALL_DIR}")
endif ()
endif ()
......@@ -646,6 +646,10 @@ if (ENABLE_INTROSPECTION)
string(REGEX MATCHALL "-L[^ ]*"