diff -Nru chromium-browser-59.0.3071.104/build/config/linux/gtk2/BUILD.gn chromium-browser-59.0.3071.109/build/config/linux/gtk2/BUILD.gn --- chromium-browser-59.0.3071.104/build/config/linux/gtk2/BUILD.gn 2017-06-15 19:03:00.000000000 +0000 +++ chromium-browser-59.0.3071.109/build/config/linux/gtk2/BUILD.gn 2017-06-20 22:03:10.000000000 +0000 @@ -26,7 +26,6 @@ # parts that explicitly need GTK2 are whitelisted on this target. group("gtk2") { visibility = [ - "//gpu/gles2_conform_support:gles2_conform_test_windowless", "//build/config/linux/gtk", "//chrome/browser/ui/libgtkui:*", ] diff -Nru chromium-browser-59.0.3071.104/build/util/LASTCHANGE chromium-browser-59.0.3071.109/build/util/LASTCHANGE --- chromium-browser-59.0.3071.104/build/util/LASTCHANGE 2017-06-15 19:04:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/build/util/LASTCHANGE 2017-06-20 22:04:48.000000000 +0000 @@ -1 +1 @@ -LASTCHANGE=98a3a7375652f76d056123496d91a1acc9dc819e +LASTCHANGE=9f4b44b898b326679817ee5a327256f8fac6ee75 diff -Nru chromium-browser-59.0.3071.104/build/util/LASTCHANGE.blink chromium-browser-59.0.3071.109/build/util/LASTCHANGE.blink --- chromium-browser-59.0.3071.104/build/util/LASTCHANGE.blink 2017-06-15 19:04:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/build/util/LASTCHANGE.blink 2017-06-20 22:04:48.000000000 +0000 @@ -1 +1 @@ -LASTCHANGE=98a3a7375652f76d056123496d91a1acc9dc819e +LASTCHANGE=9f4b44b898b326679817ee5a327256f8fac6ee75 diff -Nru chromium-browser-59.0.3071.104/chrome/browser/resources/engagement/site_engagement.js chromium-browser-59.0.3071.109/chrome/browser/resources/engagement/site_engagement.js --- chromium-browser-59.0.3071.104/chrome/browser/resources/engagement/site_engagement.js 2017-06-15 19:03:01.000000000 +0000 +++ chromium-browser-59.0.3071.109/chrome/browser/resources/engagement/site_engagement.js 2017-06-20 22:03:12.000000000 +0000 @@ -111,7 +111,7 @@ */ function handleScoreChange(origin, e) { var scoreInput = e.target; - uiHandler.setSiteEngagementScoreForUrl(origin, scoreInput.value); + uiHandler.setSiteEngagementBaseScoreForUrl(origin, scoreInput.value); scoreInput.barCellRef.style.width = (scoreInput.value * 4) + 'px'; scoreInput.blur(); enableAutoupdate(); diff -Nru chromium-browser-59.0.3071.104/chrome/VERSION chromium-browser-59.0.3071.109/chrome/VERSION --- chromium-browser-59.0.3071.104/chrome/VERSION 2017-06-15 19:03:00.000000000 +0000 +++ chromium-browser-59.0.3071.109/chrome/VERSION 2017-06-20 22:03:10.000000000 +0000 @@ -1,4 +1,4 @@ MAJOR=59 MINOR=0 BUILD=3071 -PATCH=104 +PATCH=109 diff -Nru chromium-browser-59.0.3071.104/content/browser/android/content_view_core_impl.cc chromium-browser-59.0.3071.109/content/browser/android/content_view_core_impl.cc --- chromium-browser-59.0.3071.104/content/browser/android/content_view_core_impl.cc 2017-06-15 19:03:05.000000000 +0000 +++ chromium-browser-59.0.3071.109/content/browser/android/content_view_core_impl.cc 2017-06-20 22:03:17.000000000 +0000 @@ -563,9 +563,9 @@ bool ContentViewCoreImpl::FilterInputEvent(const blink::WebInputEvent& event) { if (event.GetType() != WebInputEvent::kGestureTap && - event.GetType() != WebInputEvent::kGestureDoubleTap && event.GetType() != WebInputEvent::kGestureLongTap && - event.GetType() != WebInputEvent::kGestureLongPress) + event.GetType() != WebInputEvent::kGestureLongPress && + event.GetType() != WebInputEvent::kMouseDown) return false; JNIEnv* env = AttachCurrentThread(); @@ -573,6 +573,11 @@ if (j_obj.is_null()) return false; + Java_ContentViewCore_requestFocus(env, j_obj); + + if (event.GetType() == WebInputEvent::kMouseDown) + return false; + const blink::WebGestureEvent& gesture = static_cast(event); int gesture_type = ToGestureEventType(event.GetType()); diff -Nru chromium-browser-59.0.3071.104/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc chromium-browser-59.0.3071.109/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc --- chromium-browser-59.0.3071.104/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc 2017-06-15 19:03:05.000000000 +0000 +++ chromium-browser-59.0.3071.109/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc 2017-06-20 22:03:17.000000000 +0000 @@ -80,8 +80,10 @@ #endif #if defined(__x86_64__) || defined(__aarch64__) case __NR_newfstatat: + case __NR_fstatfs: #elif defined(__i386__) || defined(__arm__) || defined(__mips__) case __NR_fstatat64: + case __NR_fstatfs64: case __NR_getdents: #endif case __NR_getdents64: diff -Nru chromium-browser-59.0.3071.104/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java chromium-browser-59.0.3071.109/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java --- chromium-browser-59.0.3071.104/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java 2017-06-15 19:03:05.000000000 +0000 +++ chromium-browser-59.0.3071.109/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java 2017-06-20 22:03:17.000000000 +0000 @@ -1025,10 +1025,21 @@ if (type == GestureEventType.LONG_PRESS && offerLongPressToEmbedder()) { return true; } - updateForTapOrPress(type, x, y); + + if (!mPopupZoomer.isShowing()) mPopupZoomer.setLastTouch(x, y); + return false; } + @SuppressWarnings("unused") + @CalledByNative + private void requestFocus() { + if (mContainerView.isFocusable() && mContainerView.isFocusableInTouchMode() + && !mContainerView.isFocused()) { + mContainerView.requestFocus(); + } + } + @VisibleForTesting public void sendDoubleTapForTest(long timeMs, int x, int y) { if (mNativeContentViewCore == 0) return; @@ -1621,22 +1632,6 @@ } } - private void updateForTapOrPress(int type, float xPix, float yPix) { - if (type != GestureEventType.SINGLE_TAP_CONFIRMED - && type != GestureEventType.SINGLE_TAP_UP - && type != GestureEventType.LONG_PRESS - && type != GestureEventType.LONG_TAP) { - return; - } - - if (mContainerView.isFocusable() && mContainerView.isFocusableInTouchMode() - && !mContainerView.isFocused()) { - mContainerView.requestFocus(); - } - - if (!mPopupZoomer.isShowing()) mPopupZoomer.setLastTouch(xPix, yPix); - } - public void updateMultiTouchZoomSupport(boolean supportsMultiTouchZoom) { if (mNativeContentViewCore == 0) return; nativeSetMultiTouchZoomSupportEnabled(mNativeContentViewCore, supportsMultiTouchZoom); diff -Nru chromium-browser-59.0.3071.104/debian/changelog chromium-browser-59.0.3071.109/debian/changelog --- chromium-browser-59.0.3071.104/debian/changelog 2017-06-16 04:44:19.000000000 +0000 +++ chromium-browser-59.0.3071.109/debian/changelog 2017-06-21 04:37:28.000000000 +0000 @@ -1,3 +1,9 @@ +chromium-browser (59.0.3071.109-0ubuntu0.17.04.1360) zesty; urgency=medium + + * Upstream release: 59.0.3071.109 + + -- Olivier Tilloy Wed, 21 Jun 2017 06:37:28 +0200 + chromium-browser (59.0.3071.104-0ubuntu0.17.04.1358) zesty; urgency=medium * Upstream release: 59.0.3071.104 diff -Nru chromium-browser-59.0.3071.104/DEPS chromium-browser-59.0.3071.109/DEPS --- chromium-browser-59.0.3071.104/DEPS 2017-06-15 19:02:59.000000000 +0000 +++ chromium-browser-59.0.3071.109/DEPS 2017-06-20 22:03:09.000000000 +0000 @@ -6,7 +6,7 @@ 'boringssl_revision': 'c8ff30cbe716c72279a6f6a9d7d7d0d4091220fa', 'buildspec_platforms': - 'all', + 'win, linux64, win_recipes, mac64, win64', 'buildtools_revision': 'd3074448541662f242bcee623049c13a231b5648', 'catapult_revision': @@ -184,7 +184,7 @@ 'src/tools/swarming_client': (Var("chromium_git")) + '/external/swarming.client.git@11e31afa5d330756ff87aa12064bb5d032896cb5', 'src/v8': - (Var("chromium_git")) + '/v8/v8.git@c7fae8b9e56616d71d4f6d5c6160a75c52900ffa' + (Var("chromium_git")) + '/v8/v8.git@d96f5c48c5f4885d3624198d0b58d05f6839b8d3' } deps_os = { diff -Nru chromium-browser-59.0.3071.104/gpu/gles2_conform_support/BUILD.gn chromium-browser-59.0.3071.109/gpu/gles2_conform_support/BUILD.gn --- chromium-browser-59.0.3071.104/gpu/gles2_conform_support/BUILD.gn 2017-06-15 19:03:06.000000000 +0000 +++ chromium-browser-59.0.3071.109/gpu/gles2_conform_support/BUILD.gn 2017-06-20 22:03:18.000000000 +0000 @@ -413,11 +413,6 @@ # Must be done this way for warning flags to be ordered correctly. ":gles2_conform_test_warnings", ] - if (is_linux) { - if (!is_chromeos) { - deps += [ "//build/config/linux/gtk2" ] - } - } if (is_win) { deps += [ "//third_party/angle:libEGL", diff -Nru chromium-browser-59.0.3071.104/skia/BUILD.gn chromium-browser-59.0.3071.109/skia/BUILD.gn --- chromium-browser-59.0.3071.104/skia/BUILD.gn 2017-06-15 19:03:08.000000000 +0000 +++ chromium-browser-59.0.3071.109/skia/BUILD.gn 2017-06-20 22:03:21.000000000 +0000 @@ -43,7 +43,7 @@ defines = skia_for_chromium_defines - if (is_win) { + if (is_win || is_android) { defines += [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) * 0x01000000) | ((FREETYPE_MINOR) * 0x00010000) | ((FREETYPE_PATCH) * 0x00000100))" ] } diff -Nru chromium-browser-59.0.3071.104/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp chromium-browser-59.0.3071.109/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp --- chromium-browser-59.0.3071.104/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp 2017-06-15 19:03:19.000000000 +0000 +++ chromium-browser-59.0.3071.109/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp 2017-06-20 22:03:32.000000000 +0000 @@ -29,24 +29,24 @@ // TODO(nhiroki): Throttle them again after we're convinced that it's safe // or provide a mechanism that web pages can opt-out it if throttling is not // desirable. - case TaskType::kDOMManipulation: case TaskType::kDatabaseAccess: - case TaskType::kFileReading: - case TaskType::kHistoryTraversal: - case TaskType::kPerformanceTimeline: - case TaskType::kPostedMessage: - case TaskType::kRemoteEvent: - case TaskType::kSensor: - case TaskType::kUnshippedPortMessage: - case TaskType::kWebSocket: return frame ? frame->FrameScheduler()->SuspendableTaskRunner() : Platform::Current()->CurrentThread()->GetWebTaskRunner(); + case TaskType::kDOMManipulation: case TaskType::kUserInteraction: + case TaskType::kHistoryTraversal: case TaskType::kEmbed: case TaskType::kMediaElementEvent: case TaskType::kCanvasBlobSerialization: + case TaskType::kRemoteEvent: + case TaskType::kWebSocket: case TaskType::kMicrotask: + case TaskType::kPostedMessage: + case TaskType::kUnshippedPortMessage: + case TaskType::kFileReading: case TaskType::kPresentation: + case TaskType::kSensor: + case TaskType::kPerformanceTimeline: case TaskType::kWebGL: case TaskType::kUnspecedTimer: case TaskType::kMiscPlatformAPI: diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/drm_buffer.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/drm_buffer.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/drm_buffer.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/drm_buffer.cc 2017-06-20 22:03:37.000000000 +0000 @@ -107,6 +107,10 @@ return fb_pixel_format_; } +uint64_t DrmBuffer::GetFormatModifier() const { + return DRM_FORMAT_MOD_NONE; +} + uint32_t DrmBuffer::GetHandle() const { return handle_; } diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/drm_buffer.h chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/drm_buffer.h --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/drm_buffer.h 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/drm_buffer.h 2017-06-20 22:03:37.000000000 +0000 @@ -40,6 +40,7 @@ uint32_t GetFramebufferPixelFormat() const override; uint32_t GetOpaqueFramebufferId() const override; uint32_t GetOpaqueFramebufferPixelFormat() const override; + uint64_t GetFormatModifier() const override; uint32_t GetHandle() const override; gfx::Size GetSize() const override; const DrmDevice* GetDrmDevice() const override; diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer_base.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer_base.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer_base.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer_base.cc 2017-06-20 22:03:37.000000000 +0000 @@ -24,6 +24,7 @@ framebuffer_pixel_format_ = format; opaque_framebuffer_pixel_format_ = GetFourCCFormatForOpaqueFramebuffer( GetBufferFormatFromFourCCFormat(format)); + format_modifier_ = modifier; uint32_t handles[4] = {0}; uint32_t strides[4] = {0}; @@ -86,6 +87,11 @@ return opaque_framebuffer_pixel_format_; } +uint64_t GbmBufferBase::GetFormatModifier() const { + DCHECK(framebuffer_); + return format_modifier_; +} + const DrmDevice* GbmBufferBase::GetDrmDevice() const { return drm_.get(); } diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer_base.h chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer_base.h --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer_base.h 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer_base.h 2017-06-20 22:03:37.000000000 +0000 @@ -32,6 +32,7 @@ gfx::Size GetSize() const override; uint32_t GetFramebufferPixelFormat() const override; uint32_t GetOpaqueFramebufferPixelFormat() const override; + uint64_t GetFormatModifier() const override; const DrmDevice* GetDrmDevice() const override; bool RequiresGlFinish() const override; @@ -54,6 +55,7 @@ // otherwise it is set to 0. uint32_t opaque_framebuffer_ = 0; uint32_t opaque_framebuffer_pixel_format_ = 0; + uint64_t format_modifier_ = 0; DISALLOW_COPY_AND_ASSIGN(GbmBufferBase); }; diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer.cc 2017-06-20 22:03:37.000000000 +0000 @@ -83,11 +83,6 @@ return planes_[index].size; } -uint64_t GbmBuffer::GetFormatModifier(size_t index) const { - DCHECK_LT(index, planes_.size()); - return planes_[index].modifier; -} - // TODO(reveman): This should not be needed once crbug.com/597932 is fixed, // as the size would be queried directly from the underlying bo. gfx::Size GbmBuffer::GetSize() const { @@ -250,7 +245,7 @@ } handle.planes.emplace_back(buffer_->GetStride(i), buffer_->GetOffset(i), buffer_->GetSize(i), - buffer_->GetFormatModifier(i)); + buffer_->GetFormatModifier()); } return handle; } @@ -283,7 +278,7 @@ } uint64_t GbmPixmap::GetDmaBufModifier(size_t plane) const { - return buffer_->GetFormatModifier(plane); + return buffer_->GetFormatModifier(); } gfx::BufferFormat GbmPixmap::GetBufferFormat() const { diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer.h chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer.h --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/gbm_buffer.h 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/gbm_buffer.h 2017-06-20 22:03:37.000000000 +0000 @@ -48,7 +48,6 @@ int GetStride(size_t plane) const; int GetOffset(size_t plane) const; size_t GetSize(size_t plane) const; - uint64_t GetFormatModifier(size_t plane) const; gfx::Size GetSize() const override; private: diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_hardware_display_plane_manager.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_hardware_display_plane_manager.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_hardware_display_plane_manager.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_hardware_display_plane_manager.cc 2017-06-20 22:03:37.000000000 +0000 @@ -18,6 +18,7 @@ const std::vector& crtcs, uint32_t planes_per_crtc) { const int kPlaneBaseId = 50; + const struct drm_format_modifier linear_modifier { 0x1, DRM_FORMAT_MOD_NONE }; drm_ = drm; crtcs_ = crtcs; for (size_t crtc_idx = 0; crtc_idx < crtcs_.size(); crtc_idx++) { @@ -25,7 +26,7 @@ std::unique_ptr plane( new HardwareDisplayPlane(kPlaneBaseId + i, 1 << crtc_idx)); plane->Initialize(drm, std::vector(1, DRM_FORMAT_XRGB8888), - std::vector(), // modifiers + std::vector(1, linear_modifier), false, true); planes_.push_back(std::move(plane)); } diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer.cc 2017-06-20 22:03:37.000000000 +0000 @@ -3,16 +3,30 @@ // found in the LICENSE file. #include "ui/ozone/platform/drm/gpu/mock_scanout_buffer.h" +#include "ui/ozone/platform/drm/gpu/mock_drm_device.h" namespace ui { -MockScanoutBuffer::MockScanoutBuffer(const gfx::Size& size, uint32_t format) - : size_(size), format_(format) {} +namespace { + +uint32_t g_current_framebuffer_id = 1; + +} // namespace + +MockScanoutBuffer::MockScanoutBuffer(const gfx::Size& size, + uint32_t format, + uint64_t modifier, + const scoped_refptr& drm) + : size_(size), + format_(format), + modifier_(modifier), + id_(g_current_framebuffer_id++), + drm_(drm) {} MockScanoutBuffer::~MockScanoutBuffer() {} uint32_t MockScanoutBuffer::GetFramebufferId() const { - return 1; + return id_; } uint32_t MockScanoutBuffer::GetOpaqueFramebufferId() const { @@ -35,8 +49,12 @@ return format_; } +uint64_t MockScanoutBuffer::GetFormatModifier() const { + return modifier_; +} + const DrmDevice* MockScanoutBuffer::GetDrmDevice() const { - return nullptr; + return drm_.get(); } bool MockScanoutBuffer::RequiresGlFinish() const { diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc 2017-06-20 22:03:37.000000000 +0000 @@ -17,10 +17,19 @@ const scoped_refptr& drm, uint32_t format, const gfx::Size& size) { + return CreateWithModifier(drm, format, DRM_FORMAT_MOD_NONE, size); +} + +scoped_refptr MockScanoutBufferGenerator::CreateWithModifier( + const scoped_refptr& drm, + uint32_t format, + uint64_t modifier, + const gfx::Size& size) { if (allocation_failure_) return nullptr; - scoped_refptr buffer(new MockScanoutBuffer(size, format)); + scoped_refptr buffer( + new MockScanoutBuffer(size, format, modifier, drm)); return buffer; } diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h 2017-06-20 22:03:37.000000000 +0000 @@ -21,6 +21,12 @@ uint32_t format, const gfx::Size& size) override; + scoped_refptr CreateWithModifier( + const scoped_refptr& drm, + uint32_t format, + uint64_t modifier, + const gfx::Size& size); + void set_allocation_failure(bool allocation_failure) { allocation_failure_ = allocation_failure; } diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer.h chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer.h --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/mock_scanout_buffer.h 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/mock_scanout_buffer.h 2017-06-20 22:03:37.000000000 +0000 @@ -16,7 +16,9 @@ class MockScanoutBuffer : public ScanoutBuffer { public: MockScanoutBuffer(const gfx::Size& size, - uint32_t format = DRM_FORMAT_XRGB8888); + uint32_t format = DRM_FORMAT_XRGB8888, + uint64_t modifier = DRM_FORMAT_MOD_NONE, + const scoped_refptr& drm = nullptr); // ScanoutBuffer: uint32_t GetFramebufferId() const override; @@ -25,6 +27,7 @@ gfx::Size GetSize() const override; uint32_t GetFramebufferPixelFormat() const override; uint32_t GetOpaqueFramebufferPixelFormat() const override; + uint64_t GetFormatModifier() const override; const DrmDevice* GetDrmDevice() const override; bool RequiresGlFinish() const override; @@ -33,6 +36,9 @@ gfx::Size size_; uint32_t format_; + uint64_t modifier_; + uint32_t id_; + scoped_refptr drm_; DISALLOW_COPY_AND_ASSIGN(MockScanoutBuffer); }; diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/scanout_buffer.h chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/scanout_buffer.h --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/scanout_buffer.h 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/scanout_buffer.h 2017-06-20 22:03:37.000000000 +0000 @@ -34,6 +34,9 @@ // scanout when used as an opaque buffer. virtual uint32_t GetOpaqueFramebufferPixelFormat() const = 0; + // Returns format modifier for buffer. + virtual uint64_t GetFormatModifier() const = 0; + // Handle for the buffer. This is received when allocating the buffer. virtual uint32_t GetHandle() const = 0; diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/screen_manager.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/screen_manager.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/screen_manager.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/screen_manager.cc 2017-06-20 22:03:37.000000000 +0000 @@ -348,17 +348,30 @@ HardwareDisplayController* controller, const gfx::Rect& bounds) { DrmWindow* window = FindWindowAt(bounds); + + gfx::BufferFormat format = display::DisplaySnapshot::PrimaryFormat(); + uint32_t fourcc_format = ui::GetFourCCFormatForOpaqueFramebuffer(format); + if (window) { const OverlayPlane* primary = window->GetLastModesetBuffer(); const DrmDevice* drm = controller->GetAllocationDrmDevice().get(); if (primary && primary->buffer->GetSize() == bounds.size() && - primary->buffer->GetDrmDevice() == drm) - return *primary; + primary->buffer->GetDrmDevice() == drm) { + // If the controller doesn't advertise modifiers, wont have a + // modifier either and we can reuse the buffer. Otherwise, check + // to see if the controller supports the buffers format + // modifier. + const auto& modifiers = controller->GetFormatModifiers(fourcc_format); + if (modifiers.empty()) + return *primary; + for (const uint64_t modifier : modifiers) { + if (modifier == primary->buffer->GetFormatModifier()) + return *primary; + } + } } - gfx::BufferFormat format = display::DisplaySnapshot::PrimaryFormat(); scoped_refptr drm = controller->GetAllocationDrmDevice(); - uint32_t fourcc_format = ui::GetFourCCFormatForOpaqueFramebuffer(format); scoped_refptr buffer = buffer_generator_->Create(drm, fourcc_format, bounds.size()); if (!buffer) { diff -Nru chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc --- chromium-browser-59.0.3071.104/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc 2017-06-15 19:03:24.000000000 +0000 +++ chromium-browser-59.0.3071.109/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc 2017-06-20 22:03:37.000000000 +0000 @@ -16,7 +16,7 @@ #include "ui/ozone/platform/drm/gpu/drm_window.h" #include "ui/ozone/platform/drm/gpu/hardware_display_controller.h" #include "ui/ozone/platform/drm/gpu/mock_drm_device.h" -#include "ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.h" +#include "ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h" #include "ui/ozone/platform/drm/gpu/screen_manager.h" namespace { @@ -51,9 +51,10 @@ } void SetUp() override { - drm_ = new ui::MockDrmDevice(); + drm_ = new ui::MockDrmDevice(false, std::vector(1, kPrimaryCrtc), + 4 /* planes per crtc */); device_manager_.reset(new ui::DrmDeviceManager(nullptr)); - buffer_generator_.reset(new ui::MockDumbBufferGenerator()); + buffer_generator_.reset(new ui::MockScanoutBufferGenerator()); screen_manager_.reset(new ui::ScreenManager(buffer_generator_.get())); } void TearDown() override { @@ -64,7 +65,7 @@ protected: scoped_refptr drm_; std::unique_ptr device_manager_; - std::unique_ptr buffer_generator_; + std::unique_ptr buffer_generator_; std::unique_ptr screen_manager_; private: @@ -515,4 +516,34 @@ window = screen_manager_->RemoveWindow(1); window->Shutdown(); +} + +TEST_F(ScreenManagerTest, RejectBufferWithIncompatibleModifiers) { + std::unique_ptr window( + new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); + window->Initialize(buffer_generator_.get()); + window->SetBounds(GetPrimaryBounds()); + scoped_refptr buffer = + buffer_generator_->CreateWithModifier(drm_, DRM_FORMAT_XRGB8888, + I915_FORMAT_MOD_X_TILED, + GetPrimaryBounds().size()); + + window->SchedulePageFlip( + std::vector(1, ui::OverlayPlane(buffer)), + base::Bind(&EmptySwapCallback)); + screen_manager_->AddWindow(1, std::move(window)); + + screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); + screen_manager_->ConfigureDisplayController( + drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), + kDefaultMode); + + // ScreenManager::GetModesetBuffer (called to get a buffer to + // modeset the new controller) should reject the buffer with + // I915_FORMAT_MOD_X_TILED modifier we created above and the two + // framebuffer IDs should be different. + EXPECT_NE(buffer->GetFramebufferId(), drm_->current_framebuffer()); + + window = screen_manager_->RemoveWindow(1); + window->Shutdown(); } diff -Nru chromium-browser-59.0.3071.104/v8/include/v8-version.h chromium-browser-59.0.3071.109/v8/include/v8-version.h --- chromium-browser-59.0.3071.104/v8/include/v8-version.h 2017-06-15 19:04:18.000000000 +0000 +++ chromium-browser-59.0.3071.109/v8/include/v8-version.h 2017-06-20 22:04:42.000000000 +0000 @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 9 #define V8_BUILD_NUMBER 211 -#define V8_PATCH_LEVEL 35 +#define V8_PATCH_LEVEL 38 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff -Nru chromium-browser-59.0.3071.104/v8/src/compiler/access-builder.cc chromium-browser-59.0.3071.109/v8/src/compiler/access-builder.cc --- chromium-browser-59.0.3071.104/v8/src/compiler/access-builder.cc 2017-06-15 19:04:18.000000000 +0000 +++ chromium-browser-59.0.3071.109/v8/src/compiler/access-builder.cc 2017-06-20 22:04:42.000000000 +0000 @@ -737,9 +737,9 @@ FieldAccess AccessBuilder::ForFixedArraySlot( size_t index, WriteBarrierKind write_barrier_kind) { int offset = FixedArray::OffsetOfElementAt(static_cast(index)); - FieldAccess access = {kTaggedBase, offset, - Handle(), MaybeHandle(), - Type::NonInternal(), MachineType::AnyTagged(), + FieldAccess access = {kTaggedBase, offset, + Handle(), MaybeHandle(), + Type::Any(), MachineType::AnyTagged(), write_barrier_kind}; return access; } diff -Nru chromium-browser-59.0.3071.104/v8/src/compiler/escape-analysis.cc chromium-browser-59.0.3071.109/v8/src/compiler/escape-analysis.cc --- chromium-browser-59.0.3071.104/v8/src/compiler/escape-analysis.cc 2017-06-15 19:04:18.000000000 +0000 +++ chromium-browser-59.0.3071.109/v8/src/compiler/escape-analysis.cc 2017-06-20 22:04:42.000000000 +0000 @@ -853,6 +853,13 @@ case IrOpcode::kObjectIsString: case IrOpcode::kObjectIsSymbol: case IrOpcode::kObjectIsUndetectable: + case IrOpcode::kNumberLessThan: + case IrOpcode::kNumberLessThanOrEqual: + case IrOpcode::kNumberEqual: +#define CASE(opcode) case IrOpcode::k##opcode: + SIMPLIFIED_NUMBER_BINOP_LIST(CASE) + SIMPLIFIED_NUMBER_UNOP_LIST(CASE) +#undef CASE if (SetEscaped(rep)) { TRACE("Setting #%d (%s) to escaped because of use by #%d (%s)\n", rep->id(), rep->op()->mnemonic(), use->id(),