Merge pull request #313 from electron/upgrade-to-chromium-59
Upgrade to Chromium 59
This commit is contained in:
Коммит
2a875ef3a1
|
@ -0,0 +1,8 @@
|
|||
version: 2.0
|
||||
jobs:
|
||||
build:
|
||||
docker:
|
||||
- image: electronbuilds/libchromiumcontent:0.0.1
|
||||
steps:
|
||||
- checkout
|
||||
- run: script/cibuild
|
|
@ -0,0 +1,3 @@
|
|||
src
|
||||
dist
|
||||
.git
|
|
@ -0,0 +1,3 @@
|
|||
# Don't mess up with CRLF line ending on Windows
|
||||
*.py text eol=lf
|
||||
*.patch text eol=lf
|
|
@ -9,3 +9,4 @@
|
|||
.gclient
|
||||
.gclient_entries
|
||||
_gclient_src_*
|
||||
s3credentials
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
FROM ubuntu:16.04
|
||||
|
||||
# Set up TEMP directory
|
||||
ENV TEMP=/tmp
|
||||
RUN chmod a+rwx /tmp
|
||||
|
||||
# Set up HOME directory
|
||||
ENV HOME=/home
|
||||
RUN chmod a+rwx /home
|
||||
|
||||
# Install Linux packages
|
||||
ADD script/docker-install-build-deps.sh /setup/install-build-deps.sh
|
||||
RUN apt-get update && apt-get -y --force-yes install lsb-release locales
|
||||
RUN /setup/install-build-deps.sh --syms --no-prompt --no-chromeos-fonts
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
58.0.3029.110
|
||||
59.0.3071.115
|
||||
|
|
|
@ -28,6 +28,7 @@ group("targets") {
|
|||
"//ui/content_accelerators",
|
||||
"//ui/display",
|
||||
"//ui/display/util",
|
||||
"//ui/latency",
|
||||
"//ui/views",
|
||||
"//ui/views/controls/webview",
|
||||
]
|
||||
|
@ -108,7 +109,7 @@ if (is_electron_build && is_component_build) {
|
|||
|
||||
static_library("fx_zlib") {
|
||||
complete_static_lib = true
|
||||
deps = [ "//third_party/pdfium/third_party:fx_zlib" ]
|
||||
deps = [ "//third_party/zlib:zlib" ]
|
||||
}
|
||||
|
||||
static_library("libjpeg") {
|
||||
|
|
|
@ -6,4 +6,3 @@ enable_widevine = true
|
|||
proprietary_codecs = false
|
||||
is_component_ffmpeg = true
|
||||
ffmpeg_branding = "Chromium"
|
||||
use_gold = false
|
||||
|
|
|
@ -8,4 +8,3 @@ enable_widevine = true
|
|||
proprietary_codecs = true
|
||||
is_component_ffmpeg = true
|
||||
ffmpeg_branding = "Chrome"
|
||||
use_gold = false
|
||||
|
|
|
@ -8,4 +8,3 @@ enable_widevine = true
|
|||
proprietary_codecs = true
|
||||
is_component_ffmpeg = true
|
||||
ffmpeg_branding = "Chrome"
|
||||
use_gold = false
|
||||
|
|
|
@ -115,6 +115,7 @@ with open(args.out, 'w') as out:
|
|||
"cc/base",
|
||||
"cc/blink",
|
||||
"cc/cc",
|
||||
"cc/debug",
|
||||
"cc/ipc",
|
||||
"cc/paint",
|
||||
"cc/proto",
|
||||
|
@ -129,6 +130,7 @@ with open(args.out, 'w') as out:
|
|||
"components/cdm",
|
||||
"components/cookie_config",
|
||||
"components/crash/core/common",
|
||||
"components/device_event_log",
|
||||
"components/discardable_memory",
|
||||
"components/display_compositor",
|
||||
"components/filesystem",
|
||||
|
@ -154,6 +156,7 @@ with open(args.out, 'w') as out:
|
|||
"components/tracing/tracing",
|
||||
"components/url_formatter",
|
||||
"components/variations",
|
||||
"components/viz/frame_sinks/frame_sinks",
|
||||
"components/webcrypto",
|
||||
"components/webmessaging",
|
||||
])
|
||||
|
@ -194,8 +197,11 @@ with open(args.out, 'w') as out:
|
|||
"obj_services",
|
||||
[
|
||||
"services/catalog",
|
||||
"services/data_decoder",
|
||||
"services/device",
|
||||
"services/file",
|
||||
"services/resource_coordinator",
|
||||
"services/service_manager/embedder",
|
||||
"services/service_manager/public/cpp/sources",
|
||||
"services/service_manager/public/interfaces",
|
||||
"services/service_manager/runner",
|
||||
|
@ -222,11 +228,13 @@ with open(args.out, 'w') as out:
|
|||
"obj_angle",
|
||||
[
|
||||
"third_party/angle/angle_common",
|
||||
"third_party/angle/angle_gpu_info_util",
|
||||
"third_party/angle/angle_image_util",
|
||||
"third_party/angle/libANGLE",
|
||||
"third_party/angle/libEGL",
|
||||
"third_party/angle/libGLESv2",
|
||||
"third_party/angle/preprocessor",
|
||||
"third_party/angle/src/third_party/libXNVCtrl",
|
||||
"third_party/angle/translator",
|
||||
"third_party/angle/translator_lib",
|
||||
])
|
||||
|
@ -235,6 +243,7 @@ with open(args.out, 'w') as out:
|
|||
out,
|
||||
"obj_pdfium",
|
||||
[
|
||||
"third_party/freetype",
|
||||
"third_party/pdfium",
|
||||
])
|
||||
|
||||
|
@ -249,6 +258,7 @@ with open(args.out, 'w') as out:
|
|||
"third_party/WebKit/Source/platform/loader",
|
||||
"third_party/WebKit/Source/platform/mojo",
|
||||
"third_party/WebKit/Source/platform/platform",
|
||||
"third_party/WebKit/Source/platform/wtf/platform_wtf",
|
||||
"third_party/WebKit/Source/web",
|
||||
"third_party/WebKit/Source/wtf",
|
||||
])
|
||||
|
@ -288,7 +298,4 @@ with open(args.out, 'w') as out:
|
|||
"third_party/icu",
|
||||
])
|
||||
|
||||
os.environ['CHROMIUMCONTENT_2ND_PASS'] = '1'
|
||||
subprocess.check_call(['ninja', 'chromiumcontent:libs'])
|
||||
|
||||
open(args.stamp, 'w')
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
diff --git a/third_party/WebKit/Source/core/paint/ThemePainterMac.mm b/third_party/WebKit/Source/core/paint/ThemePainterMac.mm
|
||||
index a8f507a..5b54b7d 100644
|
||||
index 79c9b5586cd7..820762250150 100644
|
||||
--- a/third_party/WebKit/Source/core/paint/ThemePainterMac.mm
|
||||
+++ b/third_party/WebKit/Source/core/paint/ThemePainterMac.mm
|
||||
@@ -43,6 +43,7 @@
|
||||
|
@ -18,32 +18,32 @@ index a8f507a..5b54b7d 100644
|
|||
|
||||
namespace blink {
|
||||
|
||||
@@ -72,9 +74,11 @@ void _NSDrawCarbonThemeListBox(NSRect frame,
|
||||
@@ -73,9 +75,11 @@ bool ThemePainterMac::PaintTextField(const LayoutObject& o,
|
||||
// behavior change while remaining a fragile solution.
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=658085#c3
|
||||
if (!useNSTextFieldCell) {
|
||||
if (!use_ns_text_field_cell) {
|
||||
+#ifndef MAS_BUILD
|
||||
_NSDrawCarbonThemeBezel(
|
||||
r, LayoutTheme::isEnabled(o) && !LayoutTheme::isReadOnlyControl(o),
|
||||
r, LayoutTheme::IsEnabled(o) && !LayoutTheme::IsReadOnlyControl(o),
|
||||
YES);
|
||||
+#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -159,9 +163,11 @@ void _NSDrawCarbonThemeListBox(NSRect frame,
|
||||
const PaintInfo& paintInfo,
|
||||
@@ -160,9 +164,11 @@ bool ThemePainterMac::PaintTextArea(const LayoutObject& o,
|
||||
const PaintInfo& paint_info,
|
||||
const IntRect& r) {
|
||||
LocalCurrentGraphicsContext localContext(paintInfo.context, r);
|
||||
LocalCurrentGraphicsContext local_context(paint_info.context, r);
|
||||
+#ifndef MAS_BUILD
|
||||
_NSDrawCarbonThemeListBox(
|
||||
r, LayoutTheme::isEnabled(o) && !LayoutTheme::isReadOnlyControl(o), YES,
|
||||
r, LayoutTheme::IsEnabled(o) && !LayoutTheme::IsReadOnlyControl(o), YES,
|
||||
YES);
|
||||
+#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
diff --git a/third_party/WebKit/Source/platform/mac/KillRingMac.mm b/third_party/WebKit/Source/platform/mac/KillRingMac.mm
|
||||
index 1e74ced..6fde87a 100644
|
||||
index acf60f09fdb9..6376120a954f 100644
|
||||
--- a/third_party/WebKit/Source/platform/mac/KillRingMac.mm
|
||||
+++ b/third_party/WebKit/Source/platform/mac/KillRingMac.mm
|
||||
@@ -27,6 +27,7 @@
|
||||
|
@ -54,38 +54,38 @@ index 1e74ced..6fde87a 100644
|
|||
extern "C" {
|
||||
|
||||
// Kill ring calls. Would be better to use NSKillRing.h, but that's not
|
||||
@@ -39,38 +40,53 @@
|
||||
@@ -39,38 +40,53 @@ NSString* _NSYankFromKillRing();
|
||||
void _NSNewKillRingSequence();
|
||||
void _NSSetKillRingToYankedState();
|
||||
}
|
||||
+#endif
|
||||
|
||||
static void initializeKillRingIfNeeded() {
|
||||
static bool initializedKillRing = false;
|
||||
if (!initializedKillRing) {
|
||||
initializedKillRing = true;
|
||||
static void InitializeKillRingIfNeeded() {
|
||||
static bool initialized_kill_ring = false;
|
||||
if (!initialized_kill_ring) {
|
||||
initialized_kill_ring = true;
|
||||
+#ifndef MAS_BUILD
|
||||
_NSInitializeKillRing();
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
|
||||
void KillRing::append(const String& string) {
|
||||
initializeKillRingIfNeeded();
|
||||
void KillRing::Append(const String& string) {
|
||||
InitializeKillRingIfNeeded();
|
||||
+#ifndef MAS_BUILD
|
||||
_NSAppendToKillRing(string);
|
||||
+#endif
|
||||
}
|
||||
|
||||
void KillRing::prepend(const String& string) {
|
||||
initializeKillRingIfNeeded();
|
||||
void KillRing::Prepend(const String& string) {
|
||||
InitializeKillRingIfNeeded();
|
||||
+#ifndef MAS_BUILD
|
||||
_NSPrependToKillRing(string);
|
||||
+#endif
|
||||
}
|
||||
|
||||
String KillRing::yank() {
|
||||
initializeKillRingIfNeeded();
|
||||
String KillRing::Yank() {
|
||||
InitializeKillRingIfNeeded();
|
||||
+#ifndef MAS_BUILD
|
||||
return _NSYankFromKillRing();
|
||||
+#else
|
||||
|
@ -93,15 +93,15 @@ index 1e74ced..6fde87a 100644
|
|||
+#endif
|
||||
}
|
||||
|
||||
void KillRing::startNewSequence() {
|
||||
initializeKillRingIfNeeded();
|
||||
void KillRing::StartNewSequence() {
|
||||
InitializeKillRingIfNeeded();
|
||||
+#ifndef MAS_BUILD
|
||||
_NSNewKillRingSequence();
|
||||
+#endif
|
||||
}
|
||||
|
||||
void KillRing::setToYankedState() {
|
||||
initializeKillRingIfNeeded();
|
||||
void KillRing::SetToYankedState() {
|
||||
InitializeKillRingIfNeeded();
|
||||
+#ifndef MAS_BUILD
|
||||
_NSSetKillRingToYankedState();
|
||||
+#endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.h b/content/browser/accessibility/browser_accessibility_cocoa.h
|
||||
index 39d89e1..0f7da00 100644
|
||||
index 39d89e118301..0f7da0037cc6 100644
|
||||
--- a/content/browser/accessibility/browser_accessibility_cocoa.h
|
||||
+++ b/content/browser/accessibility/browser_accessibility_cocoa.h
|
||||
@@ -87,7 +87,9 @@
|
||||
|
@ -30,10 +30,10 @@ index 39d89e1..0f7da00 100644
|
|||
// is concerned.
|
||||
@property(nonatomic, readonly) NSString* subrole;
|
||||
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
|
||||
index 848c362..b9d2c5e 100644
|
||||
index 89fe4d98eb76..f0dfa3a056ee 100644
|
||||
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
|
||||
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
|
||||
@@ -111,6 +111,7 @@
|
||||
@@ -111,6 +111,7 @@ NSDictionary* attributeToMethodNameMap = nil;
|
||||
// VoiceOver uses -1 to mean "no limit" for AXResultsLimit.
|
||||
const int kAXResultsLimitNoLimit = -1;
|
||||
|
||||
|
@ -41,7 +41,7 @@ index 848c362..b9d2c5e 100644
|
|||
extern "C" {
|
||||
|
||||
// The following are private accessibility APIs required for cursor navigation
|
||||
@@ -315,6 +316,7 @@ void AddMisspelledTextAttributes(
|
||||
@@ -315,6 +316,7 @@ NSAttributedString* GetAttributedTextForTextMarkerRange(
|
||||
AddMisspelledTextAttributes(text_only_objects, attributed_text);
|
||||
return [attributed_text attributedSubstringFromRange:range];
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ index 848c362..b9d2c5e 100644
|
|||
|
||||
// Returns an autoreleased copy of the AXNodeData's attribute.
|
||||
NSString* NSStringForStringAttribute(
|
||||
@@ -555,7 +557,9 @@ + (void)initialize {
|
||||
@@ -555,7 +557,9 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
{NSAccessibilityDropEffectsAttribute, @"dropEffects"},
|
||||
{NSAccessibilityDOMIdentifierAttribute, @"domIdentifier"},
|
||||
{NSAccessibilityEnabledAttribute, @"enabled"},
|
||||
|
@ -59,7 +59,7 @@ index 848c362..b9d2c5e 100644
|
|||
{NSAccessibilityExpandedAttribute, @"expanded"},
|
||||
{NSAccessibilityFocusedAttribute, @"focused"},
|
||||
{NSAccessibilityGrabbedAttribute, @"grabbed"},
|
||||
@@ -583,13 +587,17 @@ + (void)initialize {
|
||||
@@ -583,13 +587,17 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
{NSAccessibilityRowsAttribute, @"rows"},
|
||||
// TODO(aboxhall): expose
|
||||
// NSAccessibilityServesAsTitleForUIElementsAttribute
|
||||
|
@ -77,7 +77,7 @@ index 848c362..b9d2c5e 100644
|
|||
{NSAccessibilitySizeAttribute, @"size"},
|
||||
{NSAccessibilitySortDirectionAttribute, @"sortDirection"},
|
||||
{NSAccessibilitySubroleAttribute, @"subrole"},
|
||||
@@ -964,6 +972,7 @@ - (NSNumber*)enabled {
|
||||
@@ -964,6 +972,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
!GetState(browserAccessibility_, ui::AX_STATE_DISABLED)];
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ index 848c362..b9d2c5e 100644
|
|||
// Returns a text marker that points to the last character in the document that
|
||||
// can be selected with VoiceOver.
|
||||
- (id)endTextMarker {
|
||||
@@ -975,6 +984,7 @@ - (id)endTextMarker {
|
||||
@@ -975,6 +984,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
AXPlatformPositionInstance position = root->CreatePositionAt(0);
|
||||
return CreateTextMarker(position->CreatePositionAtEndOfAnchor());
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ index 848c362..b9d2c5e 100644
|
|||
|
||||
- (NSNumber*)expanded {
|
||||
if (![self instanceActive])
|
||||
@@ -1667,6 +1677,7 @@ - (NSValue*)selectedTextRange {
|
||||
@@ -1678,6 +1688,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
return [NSValue valueWithRange:NSMakeRange(selStart, selLength)];
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ index 848c362..b9d2c5e 100644
|
|||
- (id)selectedTextMarkerRange {
|
||||
if (![self instanceActive])
|
||||
return nil;
|
||||
@@ -1698,6 +1709,7 @@ - (id)selectedTextMarkerRange {
|
||||
@@ -1709,6 +1720,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
anchorAffinity, *focusObject,
|
||||
focusOffset, focusAffinity));
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ index 848c362..b9d2c5e 100644
|
|||
|
||||
- (NSValue*)size {
|
||||
if (![self instanceActive])
|
||||
@@ -1730,6 +1742,7 @@ - (NSString*)sortDirection {
|
||||
@@ -1741,6 +1753,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
@ -117,7 +117,7 @@ index 848c362..b9d2c5e 100644
|
|||
// Returns a text marker that points to the first character in the document that
|
||||
// can be selected with VoiceOver.
|
||||
- (id)startTextMarker {
|
||||
@@ -1741,6 +1754,7 @@ - (id)startTextMarker {
|
||||
@@ -1752,6 +1765,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
AXPlatformPositionInstance position = root->CreatePositionAt(0);
|
||||
return CreateTextMarker(position->CreatePositionAtStartOfAnchor());
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ index 848c362..b9d2c5e 100644
|
|||
|
||||
// Returns a subrole based upon the role.
|
||||
- (NSString*) subrole {
|
||||
@@ -2013,10 +2027,12 @@ - (NSAttributedString*)attributedValueForRange:(NSRange)range {
|
||||
@@ -2024,10 +2038,12 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
NSString* value = base::SysUTF16ToNSString(browserAccessibility_->GetValue());
|
||||
NSMutableAttributedString* attributedValue =
|
||||
[[[NSMutableAttributedString alloc] initWithString:value] autorelease];
|
||||
|
@ -138,7 +138,7 @@ index 848c362..b9d2c5e 100644
|
|||
return [attributedValue attributedSubstringFromRange:range];
|
||||
}
|
||||
|
||||
@@ -2136,6 +2152,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
|
||||
@@ -2147,6 +2163,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
@ -146,7 +146,7 @@ index 848c362..b9d2c5e 100644
|
|||
if ([attribute isEqualToString:@"AXUIElementForTextMarker"]) {
|
||||
AXPlatformPositionInstance position =
|
||||
CreatePositionFromTextMarker(parameter);
|
||||
@@ -2297,6 +2314,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
|
||||
@@ -2308,6 +2325,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
NSString* text = GetTextForTextMarkerRange(parameter);
|
||||
return [NSNumber numberWithInt:[text length]];
|
||||
}
|
||||
|
@ -154,7 +154,7 @@ index 848c362..b9d2c5e 100644
|
|||
|
||||
if ([attribute isEqualToString:
|
||||
NSAccessibilityBoundsForRangeParameterizedAttribute]) {
|
||||
@@ -2334,6 +2352,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
|
||||
@@ -2345,6 +2363,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ index 848c362..b9d2c5e 100644
|
|||
if ([attribute isEqualToString:
|
||||
NSAccessibilityLineTextMarkerRangeForTextMarkerParameterizedAttribute]) {
|
||||
AXPlatformPositionInstance position =
|
||||
@@ -2411,6 +2430,7 @@ AXPlatformRange range(position->CreatePreviousLineStartPosition(),
|
||||
@@ -2422,6 +2441,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
|
||||
|
||||
return @(child->GetIndexInParent());
|
||||
}
|
||||
|
@ -171,10 +171,10 @@ index 848c362..b9d2c5e 100644
|
|||
return nil;
|
||||
}
|
||||
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm
|
||||
index 37dd8fa..1e701f9 100644
|
||||
index c6b659b777bc..fe03cb11f7d3 100644
|
||||
--- a/content/browser/accessibility/browser_accessibility_manager_mac.mm
|
||||
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
|
||||
@@ -93,8 +93,10 @@
|
||||
@@ -93,8 +93,10 @@ NSString* const NSAccessibilityTextSelectionGranularity =
|
||||
@"AXTextSelectionGranularity";
|
||||
NSString* const NSAccessibilityTextSelectionChangedFocus =
|
||||
@"AXTextSelectionChangedFocus";
|
||||
|
@ -185,7 +185,7 @@ index 37dd8fa..1e701f9 100644
|
|||
NSString* const NSAccessibilityTextChangeElement = @"AXTextChangeElement";
|
||||
NSString* const NSAccessibilityTextEditType = @"AXTextEditType";
|
||||
NSString* const NSAccessibilityTextChangeValue = @"AXTextChangeValue";
|
||||
@@ -427,11 +429,13 @@
|
||||
@@ -439,11 +441,13 @@ NSDictionary* BrowserAccessibilityManagerMac::
|
||||
[user_info setObject:native_focus_object
|
||||
forKey:NSAccessibilityTextChangeElement];
|
||||
|
||||
|
@ -200,7 +200,7 @@ index 37dd8fa..1e701f9 100644
|
|||
}
|
||||
|
||||
diff --git a/content/common/sandbox_mac.mm b/content/common/sandbox_mac.mm
|
||||
index 2c21995..9fee827 100644
|
||||
index 2c219956f05a..9fee8277e081 100644
|
||||
--- a/content/common/sandbox_mac.mm
|
||||
+++ b/content/common/sandbox_mac.mm
|
||||
@@ -41,11 +41,13 @@
|
||||
|
@ -217,7 +217,7 @@ index 2c21995..9fee827 100644
|
|||
|
||||
namespace content {
|
||||
namespace {
|
||||
@@ -306,6 +308,7 @@ NOINLINE void FatalStringQuoteException(const std::string& str) {
|
||||
@@ -306,6 +308,7 @@ void Sandbox::SandboxWarmup(int sandbox_type) {
|
||||
}
|
||||
|
||||
if (sandbox_type == SANDBOX_TYPE_RENDERER) {
|
||||
|
@ -225,7 +225,7 @@ index 2c21995..9fee827 100644
|
|||
// Now disconnect from WindowServer, after all objects have been warmed up.
|
||||
// Shutting down the connection requires connecting to WindowServer,
|
||||
// so do this before actually engaging the sandbox. This may cause two log
|
||||
@@ -318,6 +321,7 @@ NOINLINE void FatalStringQuoteException(const std::string& str) {
|
||||
@@ -318,6 +321,7 @@ void Sandbox::SandboxWarmup(int sandbox_type) {
|
||||
// launchservicesd to get an ASN. By setting this flag, HIServices skips
|
||||
// that.
|
||||
SetApplicationIsDaemon(true);
|
||||
|
@ -234,7 +234,7 @@ index 2c21995..9fee827 100644
|
|||
}
|
||||
|
||||
diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc
|
||||
index c9c9d92..2938808 100644
|
||||
index c9c9d9231af0..2938808c4db0 100644
|
||||
--- a/net/dns/dns_config_service_posix.cc
|
||||
+++ b/net/dns/dns_config_service_posix.cc
|
||||
@@ -218,6 +218,7 @@ class DnsConfigServicePosix::Watcher {
|
||||
|
@ -254,7 +254,7 @@ index c9c9d92..2938808 100644
|
|||
}
|
||||
|
||||
diff --git a/sandbox/mac/sandbox_compiler.cc b/sandbox/mac/sandbox_compiler.cc
|
||||
index e524aa7..718d3f9 100644
|
||||
index e524aa7b8510..718d3f963da5 100644
|
||||
--- a/sandbox/mac/sandbox_compiler.cc
|
||||
+++ b/sandbox/mac/sandbox_compiler.cc
|
||||
@@ -28,6 +28,7 @@ bool SandboxCompiler::InsertStringParam(const std::string& key,
|
||||
|
@ -274,10 +274,10 @@ index e524aa7..718d3f9 100644
|
|||
}
|
||||
|
||||
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
|
||||
index 2432960..0fc88af 100644
|
||||
index b79029c300d7..f0d94dacc928 100644
|
||||
--- a/ui/views/cocoa/bridged_native_widget.mm
|
||||
+++ b/ui/views/cocoa/bridged_native_widget.mm
|
||||
@@ -39,6 +39,7 @@
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "ui/views/widget/widget_aura_utils.h"
|
||||
#include "ui/views/widget/widget_delegate.h"
|
||||
|
||||
|
@ -285,7 +285,7 @@ index 2432960..0fc88af 100644
|
|||
extern "C" {
|
||||
|
||||
typedef int32_t CGSConnection;
|
||||
@@ -48,6 +49,7 @@ CGError CGSSetWindowBackgroundBlurRadius(CGSConnection connection,
|
||||
@@ -47,6 +48,7 @@ CGError CGSSetWindowBackgroundBlurRadius(CGSConnection connection,
|
||||
int radius);
|
||||
|
||||
}
|
||||
|
@ -293,7 +293,7 @@ index 2432960..0fc88af 100644
|
|||
|
||||
// The NSView that hosts the composited CALayer drawing the UI. It fills the
|
||||
// window but is not hittable so that accessibility hit tests always go to the
|
||||
@@ -101,7 +103,9 @@ - (void)setCurrentProgress:(NSAnimationProgress)progress {
|
||||
@@ -100,7 +102,9 @@ using NSViewComparatorValue = __kindof NSView*;
|
||||
|
||||
const CGFloat kMavericksMenuOpacity = 251.0 / 255.0;
|
||||
const CGFloat kYosemiteMenuOpacity = 177.0 / 255.0;
|
||||
|
@ -303,7 +303,7 @@ index 2432960..0fc88af 100644
|
|||
|
||||
// Margin at edge and corners of the window that trigger resizing. These match
|
||||
// actual Cocoa resize margins.
|
||||
@@ -1331,8 +1335,10 @@ NSUInteger CountBridgedWindows(NSArray* child_windows) {
|
||||
@@ -1332,8 +1336,10 @@ void BridgedNativeWidget::AddCompositorSuperview() {
|
||||
// solid background, but make the CALayer transparent.
|
||||
if (base::mac::IsAtLeastOS10_10()) {
|
||||
[background_layer setOpacity:kYosemiteMenuOpacity];
|
||||
|
|
|
@ -10,7 +10,7 @@ index f338a95..cde934f 100644
|
|||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "build/build_config.h"
|
||||
#include "ui/base/l10n/l10n_util.h"
|
||||
@@ -222,6 +223,9 @@ base::string16 Accelerator::GetShortcutText() const {
|
||||
@@ -219,6 +220,9 @@ base::string16 Accelerator::GetShortcutText() const {
|
||||
shortcut +=
|
||||
static_cast<base::string16::value_type>(base::ToUpperASCII(c));
|
||||
#endif
|
||||
|
@ -20,7 +20,7 @@ index f338a95..cde934f 100644
|
|||
} else {
|
||||
shortcut = l10n_util::GetStringUTF16(string_id);
|
||||
}
|
||||
@@ -246,7 +250,8 @@ base::string16 Accelerator::GetShortcutText() const {
|
||||
@@ -243,7 +247,8 @@ base::string16 Accelerator::GetShortcutText() const {
|
||||
// more information.
|
||||
if (IsCtrlDown())
|
||||
shortcut = l10n_util::GetStringFUTF16(IDS_APP_CONTROL_MODIFIER, shortcut);
|
||||
|
|
|
@ -5,8 +5,8 @@ index 3f098ef..01f1ad4 100644
|
|||
@@ -85,7 +85,7 @@ class CORE_EXPORT EditingBehavior {
|
||||
// On Mac and Windows, pressing backspace (when it isn't handled otherwise)
|
||||
// should navigate back.
|
||||
bool shouldNavigateBackOnBackspace() const {
|
||||
- return m_type != EditingUnixBehavior && m_type != EditingAndroidBehavior;
|
||||
bool ShouldNavigateBackOnBackspace() const {
|
||||
- return type_ != kEditingUnixBehavior && type_ != kEditingAndroidBehavior;
|
||||
+ return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,19 @@
|
|||
diff --git a/third_party/WebKit/Source/core/fileapi/File.h b/third_party/WebKit/Source/core/fileapi/File.h
|
||||
index 0bfe29512050..81439f7ab8f7 100644
|
||||
--- a/third_party/WebKit/Source/core/fileapi/File.h
|
||||
+++ b/third_party/WebKit/Source/core/fileapi/File.h
|
||||
@@ -170,6 +170,9 @@ class CORE_EXPORT File final : public Blob {
|
||||
}
|
||||
const String& name() const { return name_; }
|
||||
|
||||
+ // Getter for the path IDL attribute.
|
||||
+ const String& path() const { return GetPath(); }
|
||||
+
|
||||
// Getter for the lastModified IDL attribute,
|
||||
// http://dev.w3.org/2006/webapi/FileAPI/#file-attrs
|
||||
long long lastModified() const;
|
||||
diff --git a/third_party/WebKit/Source/core/fileapi/File.idl b/third_party/WebKit/Source/core/fileapi/File.idl
|
||||
index df954bc..4683b28 100644
|
||||
index df954bc8f818..4683b2853bb4 100644
|
||||
--- a/third_party/WebKit/Source/core/fileapi/File.idl
|
||||
+++ b/third_party/WebKit/Source/core/fileapi/File.idl
|
||||
@@ -32,6 +32,7 @@
|
||||
|
|
|
@ -2,25 +2,25 @@ diff --git a/third_party/WebKit/Source/core/frame/LocalFrame.cpp b/third_party/W
|
|||
index 6fa75cf..04c6a96 100644
|
||||
--- a/third_party/WebKit/Source/core/frame/LocalFrame.cpp
|
||||
+++ b/third_party/WebKit/Source/core/frame/LocalFrame.cpp
|
||||
@@ -426,10 +426,6 @@ void LocalFrame::detach(FrameDetachType type) {
|
||||
m_loader.stopAllLoaders();
|
||||
m_loader.detach();
|
||||
document()->shutdown();
|
||||
@@ -435,10 +435,6 @@ void LocalFrame::detach(FrameDetachType type) {
|
||||
loader_.StopAllLoaders();
|
||||
loader_.Detach();
|
||||
GetDocument()->Shutdown();
|
||||
- // This is the earliest that scripting can be disabled:
|
||||
- // - FrameLoader::detach() can fire XHR abort events
|
||||
- // - Document::shutdown()'s deferred widget updates can run script.
|
||||
- ScriptForbiddenScope forbidScript;
|
||||
m_loader.clear();
|
||||
if (!client())
|
||||
- ScriptForbiddenScope forbid_script;
|
||||
loader_.Clear();
|
||||
if (!Client())
|
||||
return;
|
||||
@@ -438,6 +434,10 @@ void LocalFrame::detach(FrameDetachType type) {
|
||||
@@ -447,6 +443,10 @@ void LocalFrame::detach(FrameDetachType type) {
|
||||
// Notify ScriptController that the frame is closing, since its cleanup ends
|
||||
// up calling back to LocalFrameClient via WindowProxy.
|
||||
script().clearForClose();
|
||||
GetScriptController().ClearForClose();
|
||||
+ // This is the earliest that scripting can be disabled:
|
||||
+ // - FrameLoader::detach() can fire XHR abort events
|
||||
+ // - Document::shutdown()'s deferred widget updates can run script.
|
||||
+ ScriptForbiddenScope forbidScript;
|
||||
setView(nullptr);
|
||||
+ ScriptForbiddenScope forbid_script;
|
||||
SetView(nullptr);
|
||||
|
||||
m_host->eventHandlerRegistry().didRemoveAllEventHandlers(*domWindow());
|
||||
page_->GetEventHandlerRegistry().DidRemoveAllEventHandlers(*DomWindow());
|
||||
|
|
|
@ -2,65 +2,65 @@ diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/W
|
|||
index a95f10f..b97bef9 100644
|
||||
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
|
||||
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
|
||||
@@ -832,6 +832,13 @@ v8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const {
|
||||
return scriptState->context();
|
||||
@@ -871,6 +871,13 @@ v8::Local<v8::Context> WebLocalFrameImpl::MainWorldScriptContext() const {
|
||||
return script_state->GetContext();
|
||||
}
|
||||
|
||||
+v8::Local<v8::Context> WebLocalFrameImpl::worldScriptContext(
|
||||
+ v8::Isolate* isolate, int worldID) const {
|
||||
+ PassRefPtr<DOMWrapperWorld> world = DOMWrapperWorld::ensureIsolatedWorld(
|
||||
+ isolate, worldID);
|
||||
+ return ScriptState::forWorld(frame(), *world)->context();
|
||||
+v8::Local<v8::Context> WebLocalFrameImpl::WorldScriptContext(
|
||||
+ v8::Isolate* isolate, int world_id) const {
|
||||
+ PassRefPtr<DOMWrapperWorld> world = DOMWrapperWorld::EnsureIsolatedWorld(
|
||||
+ isolate, world_id);
|
||||
+ return ToScriptState(GetFrame(), *world)->GetContext();
|
||||
+}
|
||||
+
|
||||
bool WebFrame::scriptCanAccess(WebFrame* target) {
|
||||
return BindingSecurity::shouldAllowAccessToFrame(
|
||||
currentDOMWindow(mainThreadIsolate()), target->toImplBase()->frame(),
|
||||
bool WebFrame::ScriptCanAccess(WebFrame* target) {
|
||||
return BindingSecurity::ShouldAllowAccessToFrame(
|
||||
CurrentDOMWindow(MainThreadIsolate()), target->ToImplBase()->GetFrame(),
|
||||
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.h b/third_party/WebKit/Source/web/WebLocalFrameImpl.h
|
||||
index 6898061..b79db8d 100644
|
||||
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.h
|
||||
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.h
|
||||
@@ -145,6 +145,8 @@ class WEB_EXPORT WebLocalFrameImpl final
|
||||
@@ -148,6 +148,8 @@ class WEB_EXPORT WebLocalFrameImpl final
|
||||
int argc,
|
||||
v8::Local<v8::Value> argv[]) override;
|
||||
v8::Local<v8::Context> mainWorldScriptContext() const override;
|
||||
+ v8::Local<v8::Context> worldScriptContext(
|
||||
+ v8::Isolate* isolate, int worldID) const override;
|
||||
void reload(WebFrameLoadType) override;
|
||||
void reloadWithOverrideURL(const WebURL& overrideUrl,
|
||||
v8::Local<v8::Context> MainWorldScriptContext() const override;
|
||||
+ v8::Local<v8::Context> WorldScriptContext(
|
||||
+ v8::Isolate* isolate, int world_id) const override;
|
||||
void Reload(WebFrameLoadType) override;
|
||||
void ReloadWithOverrideURL(const WebURL& override_url,
|
||||
WebFrameLoadType) override;
|
||||
diff --git a/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp b/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp
|
||||
index e43dcc0..bff3738 100644
|
||||
diff --git a/src/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp b/src/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp
|
||||
index d9f8326..ade2c3c 100644
|
||||
--- a/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp
|
||||
+++ b/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp
|
||||
@@ -212,6 +212,12 @@ v8::Local<v8::Context> WebRemoteFrameImpl::mainWorldScriptContext() const {
|
||||
@@ -211,6 +211,12 @@ v8::Local<v8::Context> WebRemoteFrameImpl::MainWorldScriptContext() const {
|
||||
return v8::Local<v8::Context>();
|
||||
}
|
||||
|
||||
+v8::Local<v8::Context> WebRemoteFrameImpl::worldScriptContext(
|
||||
+ v8::Isolate* isolate, int worldID) const {
|
||||
+v8::Local<v8::Context> WebRemoteFrameImpl::WorldScriptContext(
|
||||
+ v8::Isolate* isolate, int world_id) const {
|
||||
+ NOTREACHED();
|
||||
+ return v8::Local<v8::Context>();
|
||||
+}
|
||||
+
|
||||
v8::Local<v8::Context> WebRemoteFrameImpl::deprecatedMainWorldScriptContext()
|
||||
const {
|
||||
return toV8Context(frame(), DOMWrapperWorld::mainWorld());
|
||||
void WebRemoteFrameImpl::Reload(WebFrameLoadType) {
|
||||
NOTREACHED();
|
||||
}
|
||||
diff --git a/third_party/WebKit/Source/web/WebRemoteFrameImpl.h b/third_party/WebKit/Source/web/WebRemoteFrameImpl.h
|
||||
index d049228..de5d606 100644
|
||||
--- a/third_party/WebKit/Source/web/WebRemoteFrameImpl.h
|
||||
+++ b/third_party/WebKit/Source/web/WebRemoteFrameImpl.h
|
||||
@@ -75,6 +75,8 @@ class WEB_EXPORT WebRemoteFrameImpl final
|
||||
@@ -73,6 +73,8 @@ class WEB_EXPORT WebRemoteFrameImpl final
|
||||
int argc,
|
||||
v8::Local<v8::Value> argv[]) override;
|
||||
v8::Local<v8::Context> mainWorldScriptContext() const override;
|
||||
+ v8::Local<v8::Context> worldScriptContext(
|
||||
+ v8::Isolate* isolate, int worldID) const override;
|
||||
v8::Local<v8::Context> deprecatedMainWorldScriptContext() const override;
|
||||
void reload(WebFrameLoadType) override;
|
||||
void reloadWithOverrideURL(const WebURL& overrideUrl,
|
||||
v8::Local<v8::Context> MainWorldScriptContext() const override;
|
||||
+ v8::Local<v8::Context> WorldScriptContext(
|
||||
+ v8::Isolate* isolate, int world_id) const override;
|
||||
void Reload(WebFrameLoadType) override;
|
||||
void ReloadWithOverrideURL(const WebURL& override_url,
|
||||
WebFrameLoadType) override;
|
||||
diff --git a/third_party/WebKit/public/web/WebFrame.h b/third_party/WebKit/public/web/WebFrame.h
|
||||
index 855ed08..5c10312c 100644
|
||||
index 826ea3e..4509da9 100644
|
||||
--- a/third_party/WebKit/public/web/WebFrame.h
|
||||
+++ b/third_party/WebKit/public/web/WebFrame.h
|
||||
@@ -42,6 +42,7 @@
|
||||
|
@ -71,13 +71,13 @@ index 855ed08..5c10312c 100644
|
|||
class Value;
|
||||
template <class T>
|
||||
class Local;
|
||||
@@ -300,6 +301,9 @@ class WebFrame {
|
||||
@@ -297,6 +298,9 @@ class WebFrame {
|
||||
// be calling this API.
|
||||
virtual v8::Local<v8::Context> mainWorldScriptContext() const = 0;
|
||||
virtual v8::Local<v8::Context> MainWorldScriptContext() const = 0;
|
||||
|
||||
+ virtual v8::Local<v8::Context> worldScriptContext(
|
||||
+ v8::Isolate* isolate, int worldID) const = 0;
|
||||
+ virtual v8::Local<v8::Context> WorldScriptContext(
|
||||
+ v8::Isolate* isolate, int world_id) const = 0;
|
||||
+
|
||||
// Returns true if the WebFrame currently executing JavaScript has access
|
||||
// to the given WebFrame, or false otherwise.
|
||||
BLINK_EXPORT static bool scriptCanAccess(WebFrame*);
|
||||
BLINK_EXPORT static bool ScriptCanAccess(WebFrame*);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.h b/content/browser/renderer_host/browser_compositor_view_mac.h
|
||||
index d0ecb71..248ba9a 100644
|
||||
index 1c73b7f3a..1b368aa0a 100644
|
||||
--- a/content/browser/renderer_host/browser_compositor_view_mac.h
|
||||
+++ b/content/browser/renderer_host/browser_compositor_view_mac.h
|
||||
@@ -10,6 +10,7 @@
|
||||
|
@ -10,18 +10,16 @@ index d0ecb71..248ba9a 100644
|
|||
#include "ui/compositor/compositor.h"
|
||||
#include "ui/compositor/compositor_observer.h"
|
||||
|
||||
@@ -43,8 +44,8 @@ class BrowserCompositorMacClient {
|
||||
@@ -39,7 +40,7 @@ class BrowserCompositorMacClient {
|
||||
// is visible.
|
||||
// - The RenderWidgetHostViewMac that is used to display these frames is
|
||||
// attached to the NSView hierarchy of an NSWindow.
|
||||
-class BrowserCompositorMac : public cc::BeginFrameObserver,
|
||||
- public DelegatedFrameHostClient {
|
||||
+class CONTENT_EXPORT BrowserCompositorMac : public cc::BeginFrameObserver,
|
||||
+ public DelegatedFrameHostClient {
|
||||
-class BrowserCompositorMac : public DelegatedFrameHostClient {
|
||||
+class CONTENT_EXPORT BrowserCompositorMac : public DelegatedFrameHostClient {
|
||||
public:
|
||||
BrowserCompositorMac(
|
||||
ui::AcceleratedWidgetMacNSView* accelerated_widget_mac_ns_view,
|
||||
@@ -56,9 +57,11 @@ class BrowserCompositorMac : public cc::BeginFrameObserver,
|
||||
@@ -51,9 +52,11 @@ class BrowserCompositorMac : public DelegatedFrameHostClient {
|
||||
|
||||
// These will not return nullptr until Destroy is called.
|
||||
DelegatedFrameHost* GetDelegatedFrameHost();
|
||||
|
@ -32,12 +30,12 @@ index d0ecb71..248ba9a 100644
|
|||
+ ui::Compositor* GetCompositor();
|
||||
ui::AcceleratedWidgetMac* GetAcceleratedWidgetMac();
|
||||
|
||||
void SwapCompositorFrame(uint32_t compositor_frame_sink_id,
|
||||
void DidCreateNewRendererCompositorFrameSink(
|
||||
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm
|
||||
index e4c25e73..e2f789e 100644
|
||||
index fba983b37..8cf962916 100644
|
||||
--- a/content/browser/renderer_host/browser_compositor_view_mac.mm
|
||||
+++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
|
||||
@@ -201,6 +201,12 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
|
||||
@@ -202,6 +202,12 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
|
||||
g_spare_recyclable_compositors.Get().clear();
|
||||
}
|
||||
|
||||
|
@ -50,7 +48,7 @@ index e4c25e73..e2f789e 100644
|
|||
ui::AcceleratedWidgetMac* BrowserCompositorMac::GetAcceleratedWidgetMac() {
|
||||
if (recyclable_compositor_)
|
||||
return recyclable_compositor_->accelerated_widget_mac();
|
||||
@@ -417,8 +423,13 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
|
||||
@@ -421,8 +427,13 @@ void OnCompositingShuttingDown(ui::Compositor* compositor) override {}
|
||||
}
|
||||
|
||||
gfx::Size BrowserCompositorMac::DelegatedFrameHostDesiredSizeInDIP() const {
|
||||
|
|
|
@ -1,318 +0,0 @@
|
|||
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
|
||||
index 7b85e5440000..0ea3dd165fc1 100644
|
||||
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
|
||||
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
|
||||
@@ -896,24 +896,20 @@ void BrowserPluginGuest::OnExecuteEditCommand(int browser_plugin_instance_id,
|
||||
|
||||
void BrowserPluginGuest::OnImeSetComposition(
|
||||
int browser_plugin_instance_id,
|
||||
- const std::string& text,
|
||||
- const std::vector<blink::WebCompositionUnderline>& underlines,
|
||||
- int selection_start,
|
||||
- int selection_end) {
|
||||
- Send(new InputMsg_ImeSetComposition(routing_id(),
|
||||
- base::UTF8ToUTF16(text), underlines,
|
||||
- gfx::Range::InvalidRange(),
|
||||
- selection_start, selection_end));
|
||||
+ const BrowserPluginHostMsg_SetComposition_Params& params) {
|
||||
+ Send(new InputMsg_ImeSetComposition(
|
||||
+ routing_id(), params.text, params.underlines, params.replacement_range,
|
||||
+ params.selection_start, params.selection_end));
|
||||
}
|
||||
|
||||
void BrowserPluginGuest::OnImeCommitText(
|
||||
int browser_plugin_instance_id,
|
||||
- const std::string& text,
|
||||
+ const base::string16& text,
|
||||
const std::vector<blink::WebCompositionUnderline>& underlines,
|
||||
+ const gfx::Range& replacement_range,
|
||||
int relative_cursor_pos) {
|
||||
- Send(new InputMsg_ImeCommitText(routing_id(), base::UTF8ToUTF16(text),
|
||||
- underlines, gfx::Range::InvalidRange(),
|
||||
- relative_cursor_pos));
|
||||
+ Send(new InputMsg_ImeCommitText(routing_id(), text, underlines,
|
||||
+ replacement_range, relative_cursor_pos));
|
||||
}
|
||||
|
||||
void BrowserPluginGuest::OnImeFinishComposingText(bool keep_selection) {
|
||||
diff --git a/content/browser/browser_plugin/browser_plugin_guest.h b/content/browser/browser_plugin/browser_plugin_guest.h
|
||||
index f1218cd5505c..fedd4a75b5f5 100644
|
||||
--- a/content/browser/browser_plugin/browser_plugin_guest.h
|
||||
+++ b/content/browser/browser_plugin/browser_plugin_guest.h
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "ui/gfx/geometry/rect.h"
|
||||
|
||||
struct BrowserPluginHostMsg_Attach_Params;
|
||||
+struct BrowserPluginHostMsg_SetComposition_Params;
|
||||
|
||||
#if defined(OS_MACOSX)
|
||||
struct FrameHostMsg_ShowPopup_Params;
|
||||
@@ -342,14 +343,12 @@ class CONTENT_EXPORT BrowserPluginGuest : public GuestHost,
|
||||
void OnTextInputStateChanged(const TextInputState& params);
|
||||
void OnImeSetComposition(
|
||||
int instance_id,
|
||||
- const std::string& text,
|
||||
- const std::vector<blink::WebCompositionUnderline>& underlines,
|
||||
- int selection_start,
|
||||
- int selection_end);
|
||||
+ const BrowserPluginHostMsg_SetComposition_Params& params);
|
||||
void OnImeCommitText(
|
||||
int instance_id,
|
||||
- const std::string& text,
|
||||
+ const base::string16& text,
|
||||
const std::vector<blink::WebCompositionUnderline>& underlines,
|
||||
+ const gfx::Range& replacement_range,
|
||||
int relative_cursor_pos);
|
||||
void OnImeFinishComposingText(bool keep_selection);
|
||||
void OnExtendSelectionAndDelete(int instance_id, int before, int after);
|
||||
diff --git a/content/browser/frame_host/render_widget_host_view_guest.cc b/content/browser/frame_host/render_widget_host_view_guest.cc
|
||||
index 2197f73ad506..4a32379f081b 100644
|
||||
--- a/content/browser/frame_host/render_widget_host_view_guest.cc
|
||||
+++ b/content/browser/frame_host/render_widget_host_view_guest.cc
|
||||
@@ -84,7 +84,8 @@ RenderWidgetHostViewGuest::RenderWidgetHostViewGuest(
|
||||
: RenderWidgetHostViewChildFrame(widget_host),
|
||||
// |guest| is NULL during test.
|
||||
guest_(guest ? guest->AsWeakPtr() : base::WeakPtr<BrowserPluginGuest>()),
|
||||
- platform_view_(platform_view) {
|
||||
+ platform_view_(platform_view),
|
||||
+ should_forward_text_selection_(false) {
|
||||
gfx::NativeView view = GetNativeView();
|
||||
if (view)
|
||||
UpdateScreenInfo(view);
|
||||
@@ -380,6 +381,9 @@ void RenderWidgetHostViewGuest::TextInputStateChanged(
|
||||
return;
|
||||
// Forward the information to embedding RWHV.
|
||||
rwhv->TextInputStateChanged(params);
|
||||
+
|
||||
+ should_forward_text_selection_ =
|
||||
+ (params.type != ui::TEXT_INPUT_TYPE_NONE) && guest_ && guest_->focused();
|
||||
}
|
||||
|
||||
void RenderWidgetHostViewGuest::ImeCancelComposition() {
|
||||
@@ -417,7 +421,11 @@ void RenderWidgetHostViewGuest::ImeCompositionRangeChanged(
|
||||
void RenderWidgetHostViewGuest::SelectionChanged(const base::string16& text,
|
||||
size_t offset,
|
||||
const gfx::Range& range) {
|
||||
- platform_view_->SelectionChanged(text, offset, range);
|
||||
+ RenderWidgetHostViewBase* view = should_forward_text_selection_
|
||||
+ ? GetOwnerRenderWidgetHostView()
|
||||
+ : platform_view_.get();
|
||||
+ if (view)
|
||||
+ view->SelectionChanged(text, offset, range);
|
||||
}
|
||||
|
||||
void RenderWidgetHostViewGuest::SelectionBoundsChanged(
|
||||
diff --git a/content/browser/frame_host/render_widget_host_view_guest.h b/content/browser/frame_host/render_widget_host_view_guest.h
|
||||
index fea13850ab58..baebdd8a700d 100644
|
||||
--- a/content/browser/frame_host/render_widget_host_view_guest.h
|
||||
+++ b/content/browser/frame_host/render_widget_host_view_guest.h
|
||||
@@ -162,6 +162,12 @@ class CONTENT_EXPORT RenderWidgetHostViewGuest
|
||||
// RenderWidgetHostViewGuest mostly only cares about stuff related to
|
||||
// compositing, the rest are directly forwarded to this |platform_view_|.
|
||||
base::WeakPtr<RenderWidgetHostViewBase> platform_view_;
|
||||
+
|
||||
+ // When true the guest will forward its selection updates to the owner RWHV.
|
||||
+ // The guest may forward its updates only when there is an ongoing IME
|
||||
+ // session.
|
||||
+ bool should_forward_text_selection_;
|
||||
+
|
||||
DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewGuest);
|
||||
};
|
||||
|
||||
diff --git a/content/common/browser_plugin/browser_plugin_messages.h b/content/common/browser_plugin/browser_plugin_messages.h
|
||||
index 8c4ebd94cabf..b4e635e9ff96 100644
|
||||
--- a/content/common/browser_plugin/browser_plugin_messages.h
|
||||
+++ b/content/common/browser_plugin/browser_plugin_messages.h
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "ui/gfx/geometry/size.h"
|
||||
#include "ui/gfx/ipc/gfx_param_traits.h"
|
||||
#include "ui/gfx/ipc/skia/gfx_skia_param_traits.h"
|
||||
+#include "ui/gfx/range/range.h"
|
||||
|
||||
#undef IPC_MESSAGE_EXPORT
|
||||
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
|
||||
@@ -44,6 +45,14 @@ IPC_STRUCT_BEGIN(BrowserPluginHostMsg_Attach_Params)
|
||||
IPC_STRUCT_MEMBER(bool, is_full_page_plugin)
|
||||
IPC_STRUCT_END()
|
||||
|
||||
+IPC_STRUCT_BEGIN(BrowserPluginHostMsg_SetComposition_Params)
|
||||
+ IPC_STRUCT_MEMBER(base::string16, text)
|
||||
+ IPC_STRUCT_MEMBER(std::vector<blink::WebCompositionUnderline>, underlines)
|
||||
+ IPC_STRUCT_MEMBER(gfx::Range, replacement_range)
|
||||
+ IPC_STRUCT_MEMBER(int, selection_start)
|
||||
+ IPC_STRUCT_MEMBER(int, selection_end)
|
||||
+IPC_STRUCT_END()
|
||||
+
|
||||
// Browser plugin messages
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@@ -65,21 +74,18 @@ IPC_MESSAGE_CONTROL2(BrowserPluginHostMsg_SetEditCommandsForNextKeyEvent,
|
||||
|
||||
// This message is sent from BrowserPlugin to BrowserPluginGuest whenever IME
|
||||
// composition state is updated.
|
||||
-IPC_MESSAGE_CONTROL5(
|
||||
- BrowserPluginHostMsg_ImeSetComposition,
|
||||
- int /* browser_plugin_instance_id */,
|
||||
- std::string /* text */,
|
||||
- std::vector<blink::WebCompositionUnderline> /* underlines */,
|
||||
- int /* selectiont_start */,
|
||||
- int /* selection_end */)
|
||||
+IPC_MESSAGE_CONTROL2(BrowserPluginHostMsg_ImeSetComposition,
|
||||
+ int /* browser_plugin_instance_id */,
|
||||
+ BrowserPluginHostMsg_SetComposition_Params /* params */)
|
||||
|
||||
// This message is sent from BrowserPlugin to BrowserPluginGuest to notify that
|
||||
// deleting the current composition and inserting specified text is requested.
|
||||
-IPC_MESSAGE_CONTROL4(
|
||||
+IPC_MESSAGE_CONTROL5(
|
||||
BrowserPluginHostMsg_ImeCommitText,
|
||||
int /* browser_plugin_instance_id */,
|
||||
- std::string /* text */,
|
||||
+ base::string16 /* text */,
|
||||
std::vector<blink::WebCompositionUnderline> /* underlines */,
|
||||
+ gfx::Range /* replacement_range */,
|
||||
int /* relative_cursor_pos */)
|
||||
|
||||
// This message is sent from BrowserPlugin to BrowserPluginGuest to notify that
|
||||
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
|
||||
index d7ebcfdb8eb9..06762fbd11e2 100644
|
||||
--- a/content/renderer/browser_plugin/browser_plugin.cc
|
||||
+++ b/content/renderer/browser_plugin/browser_plugin.cc
|
||||
@@ -548,22 +548,28 @@ bool BrowserPlugin::executeEditCommand(const blink::WebString& name,
|
||||
bool BrowserPlugin::setComposition(
|
||||
const blink::WebString& text,
|
||||
const blink::WebVector<blink::WebCompositionUnderline>& underlines,
|
||||
+ const blink::WebRange& replacementRange,
|
||||
int selectionStart,
|
||||
int selectionEnd) {
|
||||
if (!attached())
|
||||
return false;
|
||||
|
||||
- std::vector<blink::WebCompositionUnderline> std_underlines;
|
||||
+ BrowserPluginHostMsg_SetComposition_Params params;
|
||||
+ params.text = text.utf16();
|
||||
for (size_t i = 0; i < underlines.size(); ++i) {
|
||||
- std_underlines.push_back(underlines[i]);
|
||||
+ params.underlines.push_back(underlines[i]);
|
||||
}
|
||||
|
||||
+ params.replacement_range =
|
||||
+ replacementRange.isNull()
|
||||
+ ? gfx::Range::InvalidRange()
|
||||
+ : gfx::Range(static_cast<uint32_t>(replacementRange.startOffset()),
|
||||
+ static_cast<uint32_t>(replacementRange.endOffset()));
|
||||
+ params.selection_start = selectionStart;
|
||||
+ params.selection_end = selectionEnd;
|
||||
+
|
||||
BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_ImeSetComposition(
|
||||
- browser_plugin_instance_id_,
|
||||
- text.utf8(),
|
||||
- std_underlines,
|
||||
- selectionStart,
|
||||
- selectionEnd));
|
||||
+ browser_plugin_instance_id_, params));
|
||||
// TODO(kochi): This assumes the IPC handling always succeeds.
|
||||
return true;
|
||||
}
|
||||
@@ -571,6 +577,7 @@ bool BrowserPlugin::setComposition(
|
||||
bool BrowserPlugin::commitText(
|
||||
const blink::WebString& text,
|
||||
const blink::WebVector<blink::WebCompositionUnderline>& underlines,
|
||||
+ const blink::WebRange& replacementRange,
|
||||
int relative_cursor_pos) {
|
||||
if (!attached())
|
||||
return false;
|
||||
@@ -580,9 +587,15 @@ bool BrowserPlugin::commitText(
|
||||
std_underlines.push_back(std_underlines[i]);
|
||||
}
|
||||
|
||||
+ gfx::Range replacement_range =
|
||||
+ replacementRange.isNull()
|
||||
+ ? gfx::Range::InvalidRange()
|
||||
+ : gfx::Range(static_cast<uint32_t>(replacementRange.startOffset()),
|
||||
+ static_cast<uint32_t>(replacementRange.endOffset()));
|
||||
+
|
||||
BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_ImeCommitText(
|
||||
- browser_plugin_instance_id_, text.utf8(), std_underlines,
|
||||
- relative_cursor_pos));
|
||||
+ browser_plugin_instance_id_, text.utf16(), std_underlines,
|
||||
+ replacement_range, relative_cursor_pos));
|
||||
// TODO(kochi): This assumes the IPC handling always succeeds.
|
||||
return true;
|
||||
}
|
||||
diff --git a/content/renderer/browser_plugin/browser_plugin.h b/content/renderer/browser_plugin/browser_plugin.h
|
||||
index 47900ad6fcfc..989306432085 100644
|
||||
--- a/content/renderer/browser_plugin/browser_plugin.h
|
||||
+++ b/content/renderer/browser_plugin/browser_plugin.h
|
||||
@@ -113,11 +113,13 @@ class CONTENT_EXPORT BrowserPlugin :
|
||||
bool setComposition(
|
||||
const blink::WebString& text,
|
||||
const blink::WebVector<blink::WebCompositionUnderline>& underlines,
|
||||
+ const blink::WebRange& replacementRange,
|
||||
int selectionStart,
|
||||
int selectionEnd) override;
|
||||
bool commitText(
|
||||
const blink::WebString& text,
|
||||
const blink::WebVector<blink::WebCompositionUnderline>& underlines,
|
||||
+ const blink::WebRange& replacementRange,
|
||||
int relative_cursor_pos) override;
|
||||
bool finishComposingText(
|
||||
blink::WebInputMethodController::ConfirmCompositionBehavior
|
||||
diff --git a/third_party/WebKit/Source/web/WebInputMethodControllerImpl.cpp b/third_party/WebKit/Source/web/WebInputMethodControllerImpl.cpp
|
||||
index e71d80d5d855..7b491d2470cf 100644
|
||||
--- a/third_party/WebKit/Source/web/WebInputMethodControllerImpl.cpp
|
||||
+++ b/third_party/WebKit/Source/web/WebInputMethodControllerImpl.cpp
|
||||
@@ -50,8 +50,8 @@ bool WebInputMethodControllerImpl::setComposition(
|
||||
int selectionStart,
|
||||
int selectionEnd) {
|
||||
if (WebPlugin* plugin = focusedPluginIfInputMethodSupported()) {
|
||||
- return plugin->setComposition(text, underlines, selectionStart,
|
||||
- selectionEnd);
|
||||
+ return plugin->setComposition(text, underlines, replacementRange,
|
||||
+ selectionStart, selectionEnd);
|
||||
}
|
||||
|
||||
// We should use this |editor| object only to complete the ongoing
|
||||
@@ -128,8 +128,10 @@ bool WebInputMethodControllerImpl::commitText(
|
||||
UserGestureIndicator gestureIndicator(DocumentUserGestureToken::create(
|
||||
frame()->document(), UserGestureToken::NewGesture));
|
||||
|
||||
- if (WebPlugin* plugin = focusedPluginIfInputMethodSupported())
|
||||
- return plugin->commitText(text, underlines, relativeCaretPosition);
|
||||
+ if (WebPlugin* plugin = focusedPluginIfInputMethodSupported()) {
|
||||
+ return plugin->commitText(text, underlines, replacementRange,
|
||||
+ relativeCaretPosition);
|
||||
+ }
|
||||
|
||||
// Select the range to be replaced with the composition later.
|
||||
if (!replacementRange.isNull())
|
||||
diff --git a/third_party/WebKit/public/web/WebPlugin.h b/third_party/WebKit/public/web/WebPlugin.h
|
||||
index 8d2078b19a07..6e6403a7a6a5 100644
|
||||
--- a/third_party/WebKit/public/web/WebPlugin.h
|
||||
+++ b/third_party/WebKit/public/web/WebPlugin.h
|
||||
@@ -167,19 +167,23 @@ class WebPlugin {
|
||||
}
|
||||
|
||||
// Sets composition text from input method, and returns true if the
|
||||
- // composition is set successfully.
|
||||
+ // composition is set successfully. If |replacementRange| is not null, the
|
||||
+ // text inside |replacementRange| will be replaced by |text|
|
||||
virtual bool setComposition(
|
||||
const WebString& text,
|
||||
const WebVector<WebCompositionUnderline>& underlines,
|
||||
+ const WebRange& replacementRange,
|
||||
int selectionStart,
|
||||
int selectionEnd) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Deletes the ongoing composition if any, inserts the specified text, and
|
||||
- // moves the caret according to relativeCaretPosition.
|
||||
+ // moves the caret according to relativeCaretPosition. If |replacementRange|
|
||||
+ // is not null, the text inside |replacementRange| will be replaced by |text|.
|
||||
virtual bool commitText(const WebString& text,
|
||||
const WebVector<WebCompositionUnderline>& underlines,
|
||||
+ const WebRange& replacementRange,
|
||||
int relativeCaretPosition) {
|
||||
return false;
|
||||
}
|
|
@ -4,7 +4,7 @@ index 06762fb..e89b1f0 100644
|
|||
+++ b/content/renderer/browser_plugin/browser_plugin.cc
|
||||
@@ -448,15 +448,11 @@ blink::WebInputEventResult BrowserPlugin::handleInputEvent(
|
||||
|
||||
DCHECK(!blink::WebInputEvent::isTouchEventType(event.type()));
|
||||
DCHECK(!blink::WebInputEvent::IsTouchEventType(event.GetType()));
|
||||
|
||||
- // With direct event routing turned on, BrowserPlugin should almost never
|
||||
- // see wheel events any more. The two exceptions are (1) scroll bubbling, and
|
||||
|
@ -13,13 +13,13 @@ index 06762fb..e89b1f0 100644
|
|||
- // it's in a top-level embedder. In both cases we should indicate the event
|
||||
- // as not handled (for GesturePinch on Mac, indicating the event has been
|
||||
- // handled leads to touchpad pinch not working).
|
||||
- if (event.type() == blink::WebInputEvent::MouseWheel)
|
||||
- return blink::WebInputEventResult::NotHandled;
|
||||
+ if (event.type() == blink::WebInputEvent::MouseWheel) {
|
||||
- if (event.GetType() == blink::WebInputEvent::kMouseWheel)
|
||||
- return blink::WebInputEventResult::kNotHandled;
|
||||
+ if (event.GetType() == blink::WebInputEvent::kMouseWheel) {
|
||||
+ auto wheel_event = static_cast<const blink::WebMouseWheelEvent&>(event);
|
||||
+ if (wheel_event.resendingPluginId == browser_plugin_instance_id_)
|
||||
+ return blink::WebInputEventResult::NotHandled;
|
||||
+ if (wheel_event.resending_plugin_id == browser_plugin_instance_id_)
|
||||
+ return blink::WebInputEventResult::kNotHandled;
|
||||
+ }
|
||||
|
||||
if (blink::WebInputEvent::isGestureEventType(event.type())) {
|
||||
if (blink::WebInputEvent::IsGestureEventType(event.GetType())) {
|
||||
auto gesture_event = static_cast<const blink::WebGestureEvent&>(event);
|
||||
|
|
|
@ -55,7 +55,7 @@ diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/So
|
|||
index 15bf689..9cdc19d 100644
|
||||
--- a/third_party/WebKit/Source/platform/BUILD.gn
|
||||
+++ b/third_party/WebKit/Source/platform/BUILD.gn
|
||||
@@ -133,6 +133,7 @@ action("character_data") {
|
||||
@@ -160,6 +160,7 @@ action("character_data") {
|
||||
}
|
||||
|
||||
executable("character_data_generator") {
|
||||
|
@ -67,7 +67,7 @@ diff --git a/third_party/widevine/cdm/BUILD.gn b/third_party/widevine/cdm/BUILD.
|
|||
index dda9799..2bf3f57 100644
|
||||
--- a/third_party/widevine/cdm/BUILD.gn
|
||||
+++ b/third_party/widevine/cdm/BUILD.gn
|
||||
@@ -110,7 +110,7 @@ if (widevine_cdm_binary_files != []) {
|
||||
@@ -153,7 +153,7 @@ if (widevine_cdm_binary_files != []) {
|
||||
"//build/config/sanitizers:deps",
|
||||
]
|
||||
|
||||
|
|
|
@ -51,12 +51,12 @@ index dd1017f..d15706b 100644
|
|||
description = "CXX {{output}}"
|
||||
outputs = [
|
||||
diff --git a/build/toolchain/win/tool_wrapper.py b/build/toolchain/win/tool_wrapper.py
|
||||
index 4e69dea..c70408c 100644
|
||||
index 3a81368f3469..7c5ef1ea5db4 100644
|
||||
--- a/build/toolchain/win/tool_wrapper.py
|
||||
+++ b/build/toolchain/win/tool_wrapper.py
|
||||
@@ -326,5 +326,25 @@ class WinTool(object):
|
||||
cmd.extend(ninja_targets)
|
||||
return subprocess.call(cmd, shell=True, cwd=BASE_DIR)
|
||||
@@ -315,6 +315,25 @@ class WinTool(object):
|
||||
dirname = dirname[0] if dirname else None
|
||||
return subprocess.call(args, shell=True, env=env, cwd=dirname)
|
||||
|
||||
+ def ExecClWrapper(self, *args):
|
||||
+ """Invokes cl.exe to compile a C/C++ source file."""
|
||||
|
@ -77,6 +77,6 @@ index 4e69dea..c70408c 100644
|
|||
+ pdb_flag = '/Fd"%s"' % pdb_filename
|
||||
+ cmdline = '%s %s' % (subprocess.list2cmdline(args), pdb_flag)
|
||||
+ return subprocess.call(cmdline, shell=False)
|
||||
+
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(sys.argv[1:]))
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/br
|
|||
index c60d39a..3ce4657 100644
|
||||
--- a/content/browser/renderer_host/render_message_filter.cc
|
||||
+++ b/content/browser/renderer_host/render_message_filter.cc
|
||||
@@ -213,12 +213,55 @@ void RenderMessageFilter::GenerateRoutingID(
|
||||
@@ -202,12 +202,55 @@ void RenderMessageFilter::GenerateRoutingID(
|
||||
void RenderMessageFilter::CreateNewWindow(
|
||||
mojom::CreateNewWindowParamsPtr params,
|
||||
const CreateNewWindowCallback& callback) {
|
||||
|
@ -62,8 +62,8 @@ diff --git a/content/common/render_message_filter.mojom b/content/common/render_
|
|||
index 78c93ef..738f278 100644
|
||||
--- a/content/common/render_message_filter.mojom
|
||||
+++ b/content/common/render_message_filter.mojom
|
||||
@@ -6,12 +6,32 @@ module content.mojom;
|
||||
|
||||
@@ -7,12 +7,32 @@ module content.mojom;
|
||||
import "cc/ipc/shared_bitmap_manager.mojom";
|
||||
import "content/common/native_types.mojom";
|
||||
import "content/public/common/window_container_type.mojom";
|
||||
+import "mojo/common/file_path.mojom";
|
||||
|
@ -95,7 +95,7 @@ index 78c93ef..738f278 100644
|
|||
struct CreateNewWindowParams {
|
||||
// The routing id of the frame initiating the open.
|
||||
int32 opener_render_frame_id;
|
||||
@@ -55,6 +75,10 @@ struct CreateNewWindowParams {
|
||||
@@ -56,6 +76,10 @@ struct CreateNewWindowParams {
|
||||
|
||||
// The window features to use for the new view.
|
||||
blink.mojom.WindowFeatures features;
|
||||
|
@ -110,7 +110,7 @@ diff --git a/content/public/browser/content_browser_client.cc b/content/public/b
|
|||
index f9f587b..b4f264c 100644
|
||||
--- a/content/public/browser/content_browser_client.cc
|
||||
+++ b/content/public/browser/content_browser_client.cc
|
||||
@@ -293,6 +293,8 @@ bool ContentBrowserClient::CanCreateWindow(
|
||||
@@ -295,6 +295,8 @@ bool ContentBrowserClient::CanCreateWindow(
|
||||
const std::string& frame_name,
|
||||
WindowOpenDisposition disposition,
|
||||
const blink::mojom::WindowFeatures& features,
|
||||
|
@ -159,7 +159,7 @@ diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view
|
|||
index c59e97853d4f..99e10f96cc54 100644
|
||||
--- a/content/renderer/render_view_impl.cc
|
||||
+++ b/content/renderer/render_view_impl.cc
|
||||
@@ -44,6 +44,7 @@
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "content/child/request_extra_data.h"
|
||||
#include "content/child/v8_value_converter_impl.h"
|
||||
#include "content/child/webmessageportchannel_impl.h"
|
||||
|
@ -167,13 +167,13 @@ index c59e97853d4f..99e10f96cc54 100644
|
|||
#include "content/common/content_constants_internal.h"
|
||||
#include "content/common/content_switches_internal.h"
|
||||
#include "content/common/dom_storage/dom_storage_types.h"
|
||||
@@ -1465,6 +1466,64 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator,
|
||||
@@ -1434,6 +1435,64 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator,
|
||||
}
|
||||
params->features = ConvertWebWindowFeaturesToMojoWindowFeatures(features);
|
||||
|
||||
+ for (size_t i = 0; i < features.additionalFeatures.size(); ++i) {
|
||||
+ for (size_t i = 0; i < features.additional_features.size(); ++i) {
|
||||
+ params->additional_features.push_back(
|
||||
+ features.additionalFeatures[i].utf8());
|
||||
+ features.additional_features[i].Utf8());
|
||||
+ }
|
||||
+
|
||||
+ params->body = mojom::ResourceRequestBody::New();
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/conte
|
|||
index 50a66bb..73a9515 100644
|
||||
--- a/content/browser/compositor/gpu_process_transport_factory.cc
|
||||
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
|
||||
@@ -220,6 +220,12 @@ GpuProcessTransportFactory::~GpuProcessTransportFactory() {
|
||||
@@ -217,6 +217,12 @@ GpuProcessTransportFactory::~GpuProcessTransportFactory() {
|
||||
std::unique_ptr<cc::SoftwareOutputDevice>
|
||||
GpuProcessTransportFactory::CreateSoftwareOutputDevice(
|
||||
ui::Compositor* compositor) {
|
||||
|
@ -27,8 +27,8 @@ index 92696ad..7da8159 100644
|
|||
#include "cc/surfaces/surface_sequence.h"
|
||||
#include "cc/trees/layer_tree_host_client.h"
|
||||
#include "cc/trees/layer_tree_host_single_thread_client.h"
|
||||
@@ -190,6 +191,15 @@ class COMPOSITOR_EXPORT CompositorLock
|
||||
DISALLOW_COPY_AND_ASSIGN(CompositorLock);
|
||||
@@ -168,6 +169,15 @@ class COMPOSITOR_EXPORT CompositorLock
|
||||
virtual void RemoveObserver(ContextFactoryObserver* observer) = 0;
|
||||
};
|
||||
|
||||
+class COMPOSITOR_EXPORT CompositorDelegate {
|
||||
|
@ -43,7 +43,7 @@ index 92696ad..7da8159 100644
|
|||
// Compositor object to take care of GPU painting.
|
||||
// A Browser compositor object is responsible for generating the final
|
||||
// displayable form of pixels comprising a single widget's contents. It draws an
|
||||
@@ -219,6 +229,9 @@ class COMPOSITOR_EXPORT Compositor
|
||||
@@ -200,6 +210,9 @@ class COMPOSITOR_EXPORT Compositor
|
||||
// Schedules a redraw of the layer tree associated with this compositor.
|
||||
void ScheduleDraw();
|
||||
|
||||
|
@ -53,12 +53,12 @@ index 92696ad..7da8159 100644
|
|||
// Sets the root of the layer tree drawn by this Compositor. The root layer
|
||||
// must have no parent. The compositor's root layer is reset if the root layer
|
||||
// is destroyed. NULL can be passed to reset the root layer, in which case the
|
||||
@@ -398,6 +411,8 @@ class COMPOSITOR_EXPORT Compositor
|
||||
@@ -379,6 +392,8 @@ class COMPOSITOR_EXPORT Compositor
|
||||
ui::ContextFactory* context_factory_;
|
||||
ui::ContextFactoryPrivate* context_factory_private_;
|
||||
|
||||
+ CompositorDelegate* delegate_ = nullptr;
|
||||
+
|
||||
// The root of the Layer tree drawn by this compositor.
|
||||
Layer* root_layer_;
|
||||
Layer* root_layer_ = nullptr;
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
|
||||
index 3b77c055108b..88a702425690 100644
|
||||
--- a/build/config/compiler/BUILD.gn
|
||||
+++ b/build/config/compiler/BUILD.gn
|
||||
@@ -1074,7 +1074,7 @@ config("default_warnings") {
|
||||
"-Wno-inconsistent-missing-override",
|
||||
]
|
||||
|
||||
- if (is_linux && target_cpu == "x86") {
|
||||
+ if (is_linux) {
|
||||
cflags += [
|
||||
# TODO(thakis): Remove from 32-bit Linux eventually, https://707084
|
||||
"-Wno-deprecated-register",
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/
|
|||
index 15b8995..6a226f1 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
|
||||
@@ -604,6 +604,9 @@ void RenderWidgetHostImpl::WasHidden() {
|
||||
@@ -613,6 +613,9 @@ void RenderWidgetHostImpl::WasHidden() {
|
||||
if (is_hidden_)
|
||||
return;
|
||||
|
||||
|
@ -16,7 +16,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/b
|
|||
index b6aa99e..ef4fa35 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_impl.h
|
||||
+++ b/content/browser/renderer_host/render_widget_host_impl.h
|
||||
@@ -114,6 +114,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl : public RenderWidgetHost,
|
||||
@@ -124,6 +124,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl : public RenderWidgetHost,
|
||||
// RenderWidgetHostImpl.
|
||||
static RenderWidgetHostImpl* From(RenderWidgetHost* rwh);
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/b
|
|||
index 1bbf60fac4e1..ca71865f89e8 100644
|
||||
--- a/content/browser/frame_host/render_frame_host_manager.cc
|
||||
+++ b/content/browser/frame_host/render_frame_host_manager.cc
|
||||
@@ -1217,6 +1217,19 @@ RenderFrameHostManager::GetSiteInstanceForNavigation(
|
||||
@@ -1167,6 +1167,19 @@ RenderFrameHostManager::GetSiteInstanceForNavigation(
|
||||
|
||||
SiteInstance* current_instance = render_frame_host_->GetSiteInstance();
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ index fb68c4c..57b15c3 100644
|
|||
#include "third_party/WebKit/public/platform/WebTouchEvent.h"
|
||||
#include "ui/gfx/geometry/size_conversions.h"
|
||||
#include "ui/gfx/geometry/size_f.h"
|
||||
@@ -712,4 +714,28 @@ void RenderWidgetHostViewChildFrame::ResetCompositorFrameSinkSupport() {
|
||||
@@ -711,4 +713,28 @@ void RenderWidgetHostViewChildFrame::ResetCompositorFrameSinkSupport() {
|
||||
support_.reset();
|
||||
}
|
||||
|
||||
|
@ -44,13 +44,15 @@ index fb68c4c..57b15c3 100644
|
|||
+ frame_subscriber_.reset();
|
||||
+}
|
||||
+
|
||||
} // namespace content
|
||||
bool RenderWidgetHostViewChildFrame::HasEmbedderChanged() {
|
||||
return false;
|
||||
}
|
||||
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.h b/content/browser/frame_host/render_widget_host_view_child_frame.h
|
||||
index 87e2de41..36edc3a 100644
|
||||
--- a/content/browser/frame_host/render_widget_host_view_child_frame.h
|
||||
+++ b/content/browser/frame_host/render_widget_host_view_child_frame.h
|
||||
@@ -157,8 +157,11 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
|
||||
void DidReceiveCompositorFrameAck() override;
|
||||
@@ -164,8 +164,11 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
|
||||
const cc::ReturnedResourceArray& resources) override;
|
||||
void OnBeginFrame(const cc::BeginFrameArgs& args) override;
|
||||
void ReclaimResources(const cc::ReturnedResourceArray& resources) override;
|
||||
- void WillDrawSurface(const cc::LocalSurfaceId& id,
|
||||
|
@ -63,12 +65,12 @@ index 87e2de41..36edc3a 100644
|
|||
|
||||
// Exposed for tests.
|
||||
bool IsChildFrameForTesting() const override;
|
||||
@@ -250,6 +253,8 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
|
||||
@@ -258,6 +261,8 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
|
||||
// The surface client ID of the parent RenderWidgetHostView. 0 if none.
|
||||
cc::FrameSinkId parent_frame_sink_id_;
|
||||
|
||||
+ std::unique_ptr<RenderWidgetHostViewFrameSubscriber> frame_subscriber_;
|
||||
+
|
||||
base::WeakPtrFactory<RenderWidgetHostViewChildFrame> weak_factory_;
|
||||
DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewChildFrame);
|
||||
};
|
||||
bool has_frame_ = false;
|
||||
cc::mojom::MojoCompositorFrameSinkClient* renderer_compositor_frame_sink_ =
|
||||
nullptr;
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
diff --git a/ui/latency/BUILD.gn b/ui/latency/BUILD.gn
|
||||
index b0242373612f..9667d40fc50d 100644
|
||||
--- a/ui/latency/BUILD.gn
|
||||
+++ b/ui/latency/BUILD.gn
|
||||
@@ -4,19 +4,22 @@
|
||||
|
||||
import("//testing/test.gni")
|
||||
|
||||
-source_set("latency") {
|
||||
+component("latency") {
|
||||
sources = [
|
||||
"latency/latency_histogram_macros.h",
|
||||
"latency_info.cc",
|
||||
"latency_info.h",
|
||||
"latency_tracker.cc",
|
||||
"latency_tracker.h",
|
||||
+ "ui_latency_export.h",
|
||||
]
|
||||
|
||||
deps = [
|
||||
"//base",
|
||||
"//ui/gfx",
|
||||
]
|
||||
+
|
||||
+ defines = [ "UI_LATENCY_IMPLEMENTATION" ]
|
||||
}
|
||||
|
||||
test("latency_unittests") {
|
||||
diff --git a/ui/latency/latency_info.h b/ui/latency/latency_info.h
|
||||
index b358fba..5aa05a4 100644
|
||||
--- a/ui/latency/latency_info.h
|
||||
+++ b/ui/latency/latency_info.h
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
#include "base/containers/small_map.h"
|
||||
#include "base/time/time.h"
|
||||
+#include "ui/latency/ui_latency_export.h"
|
||||
#include "ui/gfx/geometry/point_f.h"
|
||||
|
||||
#if !defined(OS_IOS)
|
||||
@@ -113,7 +114,7 @@ enum SourceEventType {
|
||||
SOURCE_EVENT_TYPE_LAST = OTHER,
|
||||
};
|
||||
|
||||
-class LatencyInfo {
|
||||
+class UI_LATENCY_EXPORT LatencyInfo {
|
||||
public:
|
||||
struct LatencyComponent {
|
||||
// Nondecreasing number that can be used to determine what events happened
|
||||
diff --git a/ui/latency/latency_tracker.h b/ui/latency/latency_tracker.h
|
||||
index 0fae6d317702..23717620ede1 100644
|
||||
--- a/ui/latency/latency_tracker.h
|
||||
+++ b/ui/latency/latency_tracker.h
|
||||
@@ -7,12 +7,13 @@
|
||||
|
||||
#include "base/macros.h"
|
||||
#include "ui/latency/latency_info.h"
|
||||
+#include "ui/latency/ui_latency_export.h"
|
||||
|
||||
namespace ui {
|
||||
|
||||
// Utility class for tracking the latency of events. Relies on LatencyInfo
|
||||
// components logged by content::RenderWidgetHostLatencyTracker.
|
||||
-class LatencyTracker {
|
||||
+class UI_LATENCY_EXPORT LatencyTracker {
|
||||
public:
|
||||
LatencyTracker() = default;
|
||||
~LatencyTracker() = default;
|
||||
diff --git a/ui/latency/ui_latency_export.h b/ui/latency/ui_latency_export.h
|
||||
new file mode 100644
|
||||
index 0000000..f24ee91
|
||||
--- /dev/null
|
||||
+++ b/ui/latency/ui_latency_export.h
|
||||
@@ -0,0 +1,25 @@
|
||||
+#ifndef UI_LATENCY_UI_LATENCY_EXPORT_H_
|
||||
+#define UI_LATENCY_UI_LATENCY_EXPORT_H_
|
||||
+
|
||||
+#if defined(COMPONENT_BUILD)
|
||||
+#if defined(WIN32)
|
||||
+
|
||||
+#if defined(UI_LATENCY_IMPLEMENTATION)
|
||||
+#define UI_LATENCY_EXPORT __declspec(dllexport)
|
||||
+#else
|
||||
+#define UI_LATENCY_EXPORT __declspec(dllimport)
|
||||
+#endif // defined(UI_LATENCY_IMPLEMENTATION)
|
||||
+
|
||||
+#else // defined(WIN32)
|
||||
+#if defined(UI_LATENCY_IMPLEMENTATION)
|
||||
+#define UI_LATENCY_EXPORT __attribute__((visibility("default")))
|
||||
+#else
|
||||
+#define UI_LATENCY_EXPORT
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+#else // defined(COMPONENT_BUILD)
|
||||
+#define UI_LATENCY_EXPORT
|
||||
+#endif
|
||||
+
|
||||
+#endif // UI_LATENCY_UI_LATENCY_EXPORT_H_
|
|
@ -2,7 +2,7 @@ diff --git a/chrome/browser/ui/libgtkui/BUILD.gn b/chrome/browser/ui/libgtkui/BU
|
|||
index aa48833..ea700cc 100644
|
||||
--- a/chrome/browser/ui/libgtkui/BUILD.gn
|
||||
+++ b/chrome/browser/ui/libgtkui/BUILD.gn
|
||||
@@ -115,6 +115,7 @@ template("libgtkui") {
|
||||
@@ -116,6 +116,7 @@ template("libgtkui") {
|
||||
"//chrome:strings",
|
||||
"//chrome/app:command_ids",
|
||||
"//chrome/app/theme:theme_resources",
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
|
||||
index 45056271e932..7514dba824d2 100644
|
||||
index 3d9979e895f6..8b085fe8de0d 100644
|
||||
--- a/content/public/browser/content_browser_client.h
|
||||
+++ b/content/public/browser/content_browser_client.h
|
||||
@@ -162,6 +163,11 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
@@ -171,6 +171,11 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
const scoped_refptr<base::TaskRunner>& task_runner,
|
||||
const base::Closure& task);
|
||||
base::OnceClosure task);
|
||||
|
||||
+ // Electron: Allows intercepting the SiteInstance being created for navigation
|
||||
+ virtual void OnCreateSiteInstanceForNavigation(
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/app/content_main_runner.cc b/content/app/content_main_runne
|
|||
index c283922..397ba80 100644
|
||||
--- a/content/app/content_main_runner.cc
|
||||
+++ b/content/app/content_main_runner.cc
|
||||
@@ -763,7 +763,7 @@ class ContentMainRunnerImpl : public ContentMainRunner {
|
||||
@@ -657,7 +657,7 @@ class ContentMainRunnerImpl : public ContentMainRunner {
|
||||
|
||||
InitializeV8IfNeeded(command_line, process_type);
|
||||
|
||||
|
|
|
@ -1,80 +0,0 @@
|
|||
diff --git a/components/ui_devtools/string_util.h b/components/ui_devtools/string_util.h
|
||||
index 4efb835380f6..d08b8b6f22f6 100644
|
||||
--- a/components/ui_devtools/string_util.h
|
||||
+++ b/components/ui_devtools/string_util.h
|
||||
@@ -45,6 +45,11 @@ class StringUtil {
|
||||
static String fromDouble(double number) {
|
||||
return base::DoubleToString(number);
|
||||
}
|
||||
+ static double toDouble(const char* s, size_t len, bool* ok) {
|
||||
+ double v = 0.0;
|
||||
+ *ok = base::StringToDouble(std::string(s, len), &v);
|
||||
+ return *ok ? v : 0.0;
|
||||
+ }
|
||||
static void builderAppend(StringBuilder& builder, const String& s) {
|
||||
builder.append(s);
|
||||
}
|
||||
diff --git a/content/browser/devtools/protocol_string.h b/content/browser/devtools/protocol_string.h
|
||||
index 90dbd4abf7cf..38dd03e41c34 100644
|
||||
--- a/content/browser/devtools/protocol_string.h
|
||||
+++ b/content/browser/devtools/protocol_string.h
|
||||
@@ -52,6 +52,11 @@ class CONTENT_EXPORT StringUtil {
|
||||
s = "0" + s;
|
||||
return s;
|
||||
}
|
||||
+ static double toDouble(const char* s, size_t len, bool* ok) {
|
||||
+ double v = 0.0;
|
||||
+ *ok = base::StringToDouble(std::string(s, len), &v);
|
||||
+ return *ok ? v : 0.0;
|
||||
+ }
|
||||
static size_t find(const String& s, const char* needle) {
|
||||
return s.find(needle);
|
||||
}
|
||||
diff --git a/third_party/WebKit/Source/core/inspector/V8InspectorString.h b/third_party/WebKit/Source/core/inspector/V8InspectorString.h
|
||||
index c2d74494dcad..e86c6650b1d3 100644
|
||||
--- a/third_party/WebKit/Source/core/inspector/V8InspectorString.h
|
||||
+++ b/third_party/WebKit/Source/core/inspector/V8InspectorString.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "wtf/Assertions.h"
|
||||
#include "wtf/text/StringBuilder.h"
|
||||
#include "wtf/text/StringHash.h"
|
||||
+#include "wtf/text/StringToNumber.h"
|
||||
#include "wtf/text/StringView.h"
|
||||
#include "wtf/text/WTFString.h"
|
||||
|
||||
@@ -45,6 +46,9 @@ class CORE_EXPORT StringUtil {
|
||||
static String fromDouble(double number) {
|
||||
return Decimal::fromDouble(number).toString();
|
||||
}
|
||||
+ static double toDouble(const char* s, size_t len, bool* ok) {
|
||||
+ return WTF::charactersToDouble(reinterpret_cast<const LChar*>(s), len, ok);
|
||||
+ }
|
||||
static size_t find(const String& s, const char* needle) {
|
||||
return s.find(needle);
|
||||
}
|
||||
diff --git a/third_party/inspector_protocol/lib/Parser_cpp.template b/third_party/inspector_protocol/lib/Parser_cpp.template
|
||||
index 4bf6bebc467e..f3dde5ac218e 100644
|
||||
--- a/third_party/inspector_protocol/lib/Parser_cpp.template
|
||||
+++ b/third_party/inspector_protocol/lib/Parser_cpp.template
|
||||
@@ -51,19 +51,13 @@ double charactersToDouble(const uint16_t* characters, size_t length, bool* ok)
|
||||
buffer.push_back(static_cast<char>(characters[i]));
|
||||
}
|
||||
buffer.push_back('\0');
|
||||
- char* endptr;
|
||||
- double result = std::strtod(buffer.data(), &endptr);
|
||||
- *ok = !(*endptr);
|
||||
- return result;
|
||||
+ return StringUtil::toDouble(buffer.data(), length, ok);
|
||||
}
|
||||
|
||||
double charactersToDouble(const uint8_t* characters, size_t length, bool* ok)
|
||||
{
|
||||
std::string buffer(reinterpret_cast<const char*>(characters), length);
|
||||
- char* endptr;
|
||||
- double result = std::strtod(buffer.data(), &endptr);
|
||||
- *ok = !(*endptr);
|
||||
- return result;
|
||||
+ return StringUtil::toDouble(buffer.data(), length, ok);
|
||||
}
|
||||
|
||||
template<typename Char>
|
|
@ -2,7 +2,7 @@ diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc
|
|||
index 1fa0964..06e5ad8 100644
|
||||
--- a/pdf/out_of_process_instance.cc
|
||||
+++ b/pdf/out_of_process_instance.cc
|
||||
@@ -336,6 +336,7 @@ bool OutOfProcessInstance::Init(uint32_t argc,
|
||||
@@ -335,6 +335,7 @@ bool OutOfProcessInstance::Init(uint32_t argc,
|
||||
base::StringPiece document_url_piece(document_url);
|
||||
is_print_preview_ = document_url_piece.starts_with(kChromePrint);
|
||||
if (!document_url_piece.starts_with(kChromeExtension) &&
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
diff --git a/BUILD.gn b/BUILD.gn
|
||||
index 067416ed38f4..9fa07961c5b8 100644
|
||||
--- a/third_party/protobuf/BUILD.gn
|
||||
+++ b/third_party/protobuf/BUILD.gn
|
||||
@@ -599,6 +599,11 @@ if (current_toolchain == host_toolchain) {
|
||||
|
||||
configs -= [ "//build/config/compiler:chromium_code" ]
|
||||
configs += [ "//build/config/compiler:no_chromium_code" ]
|
||||
+ if (is_win) {
|
||||
+ # https://crbug.com/703251
|
||||
+ configs -= [ "//build/config/win:default_incremental_linking" ]
|
||||
+ configs += [ "//build/config/win:no_incremental_linking" ]
|
||||
+ }
|
||||
|
||||
cflags = protobuf_lite_cflags
|
||||
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/con
|
|||
index 029e72d..d079ba9 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
|
||||
@@ -430,6 +430,35 @@ cc::FrameSinkId RenderWidgetHostViewBase::FrameSinkIdAtPoint(
|
||||
@@ -414,6 +414,35 @@ cc::FrameSinkId RenderWidgetHostViewBase::FrameSinkIdAtPoint(
|
||||
return cc::FrameSinkId();
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/cont
|
|||
index 657ad20..47920a9 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_base.h
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
|
||||
@@ -22,8 +22,10 @@
|
||||
@@ -23,8 +23,10 @@
|
||||
#include "cc/output/compositor_frame.h"
|
||||
#include "cc/surfaces/surface_id.h"
|
||||
#include "content/browser/renderer_host/event_with_latency_info.h"
|
||||
|
@ -53,7 +53,7 @@ index 657ad20..47920a9 100644
|
|||
#include "content/public/browser/render_widget_host_view.h"
|
||||
#include "content/public/common/screen_info.h"
|
||||
#include "ipc/ipc_listener.h"
|
||||
@@ -66,8 +68,10 @@ class BrowserAccessibilityDelegate;
|
||||
@@ -73,8 +75,10 @@ class BrowserAccessibilityDelegate;
|
||||
class BrowserAccessibilityManager;
|
||||
class RenderWidgetHostImpl;
|
||||
class RenderWidgetHostViewBaseObserver;
|
||||
|
@ -64,7 +64,7 @@ index 657ad20..47920a9 100644
|
|||
class WebCursor;
|
||||
struct NativeWebKeyboardEvent;
|
||||
struct TextInputState;
|
||||
@@ -116,6 +120,9 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
|
||||
@@ -120,6 +124,9 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
|
||||
void FocusedNodeTouched(const gfx::Point& location_dips_screen,
|
||||
bool editable) override;
|
||||
|
||||
|
@ -74,7 +74,7 @@ index 657ad20..47920a9 100644
|
|||
// This only needs to be overridden by RenderWidgetHostViewBase subclasses
|
||||
// that handle content embedded within other RenderWidgetHostViews.
|
||||
gfx::Point TransformPointToRootCoordSpace(const gfx::Point& point) override;
|
||||
@@ -248,16 +255,21 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
|
||||
@@ -263,16 +270,21 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
|
||||
cc::SurfaceHittestDelegate* delegate,
|
||||
const gfx::Point& point,
|
||||
gfx::Point* transformed_point);
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/cont
|
|||
index b7f8bad5ef1a..3c074e7f5bcb 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
@@ -88,6 +88,7 @@
|
||||
@@ -87,6 +87,7 @@
|
||||
#include "ui/gfx/geometry/rect_conversions.h"
|
||||
#include "ui/gfx/geometry/size_conversions.h"
|
||||
#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
|
||||
|
@ -10,7 +10,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
#include "ui/gl/gl_switches.h"
|
||||
|
||||
using content::BrowserAccessibility;
|
||||
@@ -139,6 +140,11 @@ BOOL EventIsReservedBySystem(NSEvent* event) {
|
||||
@@ -138,6 +139,11 @@ BOOL EventIsReservedBySystem(NSEvent* event) {
|
||||
|
||||
} // namespace
|
||||
|
||||
|
@ -22,7 +22,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
// These are not documented, so use only after checking -respondsToSelector:.
|
||||
@interface NSApplication (UndocumentedSpeechMethods)
|
||||
- (void)speakString:(NSString*)string;
|
||||
@@ -465,7 +471,9 @@ float FlipYFromRectToScreen(float y, float rect_height) {
|
||||
@@ -455,7 +461,9 @@ float FlipYFromRectToScreen(float y, float rect_height) {
|
||||
background_layer_.reset([[CALayer alloc] init]);
|
||||
// Set the default color to be white. This is the wrong thing to do, but many
|
||||
// UI components expect this view to be opaque.
|
||||
|
@ -32,7 +32,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
[cocoa_view_ setLayer:background_layer_];
|
||||
[cocoa_view_ setWantsLayer:YES];
|
||||
|
||||
@@ -1846,6 +1854,9 @@ - (BOOL)acceptsMouseEventsWhenInactive {
|
||||
@@ -1856,6 +1864,9 @@ - (BOOL)acceptsMouseEventsWhenInactive {
|
||||
}
|
||||
|
||||
- (BOOL)acceptsFirstMouse:(NSEvent*)theEvent {
|
||||
|
@ -42,7 +42,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
return [self acceptsMouseEventsWhenInactive];
|
||||
}
|
||||
|
||||
@@ -2002,6 +2013,7 @@ - (BOOL)performKeyEquivalent:(NSEvent*)theEvent {
|
||||
@@ -2028,6 +2039,7 @@ - (BOOL)performKeyEquivalent:(NSEvent*)theEvent {
|
||||
if (EventIsReservedBySystem(theEvent))
|
||||
return NO;
|
||||
|
||||
|
@ -50,7 +50,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
// If we return |NO| from this function, cocoa will send the key event to
|
||||
// the menu and only if the menu does not process the event to |keyDown:|. We
|
||||
// want to send the event to a renderer _before_ sending it to the menu, so
|
||||
@@ -2015,6 +2027,7 @@ - (BOOL)performKeyEquivalent:(NSEvent*)theEvent {
|
||||
@@ -2041,6 +2059,7 @@ - (BOOL)performKeyEquivalent:(NSEvent*)theEvent {
|
||||
DCHECK(![[NSApp mainMenu] performKeyEquivalent:theEvent]);
|
||||
return NO;
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
|
||||
// Command key combinations are sent via performKeyEquivalent rather than
|
||||
// keyDown:. We just forward this on and if WebCore doesn't want to handle
|
||||
@@ -2809,6 +2822,9 @@ - (RenderWidgetHostViewMac*)renderWidgetHostViewMac {
|
||||
@@ -2835,6 +2848,9 @@ - (RenderWidgetHostViewMac*)renderWidgetHostViewMac {
|
||||
// move) for the given event. Customize here to be more selective about which
|
||||
// key presses to autohide on.
|
||||
+ (BOOL)shouldAutohideCursorForEvent:(NSEvent*)event {
|
||||
|
@ -68,7 +68,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
return ([event type] == NSKeyDown &&
|
||||
!([event modifierFlags] & NSCommandKeyMask)) ? YES : NO;
|
||||
}
|
||||
@@ -2965,9 +2981,11 @@ - (id)accessibilityFocusedUIElement {
|
||||
@@ -2991,9 +3007,11 @@ - (id)accessibilityFocusedUIElement {
|
||||
// Since this implementation doesn't have to wait any IPC calls, this doesn't
|
||||
// make any key-typing jank. --hbono 7/23/09
|
||||
//
|
||||
|
@ -80,7 +80,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
|
||||
- (NSArray *)validAttributesForMarkedText {
|
||||
// This code is just copied from WebKit except renaming variables.
|
||||
@@ -2976,7 +2994,9 @@ - (NSArray *)validAttributesForMarkedText {
|
||||
@@ -3002,7 +3020,9 @@ - (NSArray *)validAttributesForMarkedText {
|
||||
NSUnderlineStyleAttributeName,
|
||||
NSUnderlineColorAttributeName,
|
||||
NSMarkedClauseSegmentAttributeName,
|
||||
|
@ -90,7 +90,7 @@ index b7f8bad5ef1a..3c074e7f5bcb 100644
|
|||
nil]);
|
||||
}
|
||||
return validAttributesForMarkedText_.get();
|
||||
@@ -3486,6 +3506,10 @@ - (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard {
|
||||
@@ -3512,6 +3532,10 @@ - (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard {
|
||||
}
|
||||
|
||||
- (BOOL)isOpaque {
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/BUILD.gn b/BUILD.gn
|
|||
index fb2b163..6891861 100755
|
||||
--- a/BUILD.gn
|
||||
+++ b/BUILD.gn
|
||||
@@ -394,6 +394,13 @@ if (is_component_ffmpeg) {
|
||||
@@ -407,6 +407,13 @@ if (is_component_ffmpeg) {
|
||||
# So we can append below and assume they're defined.
|
||||
ldflags = []
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
diff --git a/BUILD.gn b/BUILD.gn
|
||||
index bfd68e2b..6557d38a 100644
|
||||
--- a/BUILD.gn
|
||||
+++ b/BUILD.gn
|
||||
@@ -12,6 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
+import("//build/config/compiler/compiler.gni")
|
||||
+
|
||||
config("swiftshader_config") {
|
||||
defines = [ "STRICT_CONFORMANCE" ] # Disables OpenGL ES 3.0
|
||||
|
||||
@@ -88,6 +90,12 @@ config("swiftshader_config") {
|
||||
"-Wl,--hash-style=both",
|
||||
"-Wl,--gc-sections",
|
||||
]
|
||||
+ # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
|
||||
+ if (use_gold && target_cpu == "x86") {
|
||||
+ ldflags += [
|
||||
+ "-Wl,--icf=none",
|
||||
+ ]
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ diff --git a/sandbox/linux/services/credentials.cc b/sandbox/linux/services/cred
|
|||
index 50a109e..3ee9159 100644
|
||||
--- a/sandbox/linux/services/credentials.cc
|
||||
+++ b/sandbox/linux/services/credentials.cc
|
||||
@@ -348,8 +348,10 @@ pid_t Credentials::ForkAndDropCapabilitiesInChild() {
|
||||
@@ -358,8 +358,10 @@ pid_t Credentials::ForkAndDropCapabilitiesInChild() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/include/v8.h b/include/v8.h
|
|||
index baf44170f0..88cf5c7a91 100644
|
||||
--- a/include/v8.h
|
||||
+++ b/include/v8.h
|
||||
@@ -6786,6 +6786,9 @@ class V8_EXPORT Isolate {
|
||||
@@ -6967,6 +6967,9 @@ class V8_EXPORT Isolate {
|
||||
V8_DEPRECATE_SOON("CpuProfiler should be created with CpuProfiler::New call.",
|
||||
CpuProfiler* GetCpuProfiler());
|
||||
|
||||
|
@ -16,7 +16,7 @@ diff --git a/src/api.cc b/src/api.cc
|
|||
index beefd61bdb..09ed5e0af8 100644
|
||||
--- a/src/api.cc
|
||||
+++ b/src/api.cc
|
||||
@@ -7998,6 +7998,12 @@ CpuProfiler* Isolate::GetCpuProfiler() {
|
||||
@@ -8121,6 +8121,12 @@ CpuProfiler* Isolate::GetCpuProfiler() {
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/BUILD.gn b/BUILD.gn
|
|||
index 8895103..69f8bf5 100644
|
||||
--- a/BUILD.gn
|
||||
+++ b/BUILD.gn
|
||||
@@ -137,25 +137,41 @@ config("internal_config") {
|
||||
@@ -158,25 +158,41 @@ config("internal_config") {
|
||||
if (is_component_build) {
|
||||
defines = [ "BUILDING_V8_SHARED" ]
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ index 8895103..69f8bf5 100644
|
|||
defines = [ "USING_V8_BASE_SHARED" ]
|
||||
}
|
||||
libs = []
|
||||
@@ -172,7 +188,7 @@ config("libsampler_config") {
|
||||
@@ -193,7 +209,7 @@ config("libsampler_config") {
|
||||
# This config should only be applied to code using V8 and not any V8 code
|
||||
# itself.
|
||||
config("external_config") {
|
||||
|
@ -54,8 +54,8 @@ index 8895103..69f8bf5 100644
|
|||
+ if (is_component_build || is_electron_build) {
|
||||
defines = [ "USING_V8_SHARED" ]
|
||||
}
|
||||
include_dirs = [ "include" ]
|
||||
@@ -2328,7 +2344,7 @@ v8_component("v8_libbase") {
|
||||
include_dirs = [
|
||||
@@ -2444,7 +2460,7 @@ v8_component("v8_libbase") {
|
||||
|
||||
defines = []
|
||||
|
||||
|
@ -64,7 +64,7 @@ index 8895103..69f8bf5 100644
|
|||
defines = [ "BUILDING_V8_BASE_SHARED" ]
|
||||
}
|
||||
|
||||
@@ -2418,7 +2434,7 @@ v8_component("v8_libplatform") {
|
||||
@@ -2537,7 +2553,7 @@ v8_component("v8_libplatform") {
|
||||
|
||||
configs = [ ":internal_config_base" ]
|
||||
|
||||
|
@ -73,7 +73,7 @@ index 8895103..69f8bf5 100644
|
|||
defines = [ "BUILDING_V8_PLATFORM_SHARED" ]
|
||||
}
|
||||
|
||||
@@ -2482,6 +2498,8 @@ if (current_toolchain == v8_snapshot_toolchain) {
|
||||
@@ -2601,6 +2617,8 @@ if (current_toolchain == v8_snapshot_toolchain) {
|
||||
|
||||
configs = [ ":internal_config" ]
|
||||
|
||||
|
@ -81,17 +81,8 @@ index 8895103..69f8bf5 100644
|
|||
+
|
||||
deps = [
|
||||
":v8_base",
|
||||
":v8_libbase",
|
||||
@@ -2514,6 +2532,8 @@ v8_executable("mkpeephole") {
|
||||
":internal_config",
|
||||
]
|
||||
|
||||
+ configs += [ "//chromiumcontent:build_time_executable" ]
|
||||
+
|
||||
deps = [
|
||||
":v8_libbase",
|
||||
"//build/config/sanitizers:deps",
|
||||
@@ -2588,7 +2608,7 @@ group("v8_fuzzers") {
|
||||
":v8_builtins_setup",
|
||||
@@ -2680,7 +2700,7 @@ group("v8_fuzzers") {
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -112,7 +103,7 @@ index ea628e0..1b521f8 100644
|
|||
|
||||
declare_args() {
|
||||
# Includes files needed for correctness fuzzing.
|
||||
@@ -143,7 +144,13 @@ template("v8_executable") {
|
||||
@@ -139,7 +140,13 @@ template("v8_executable") {
|
||||
}
|
||||
|
||||
template("v8_component") {
|
||||
|
|
|
@ -2,16 +2,16 @@ diff --git a/src/snapshot/mksnapshot.cc b/src/snapshot/mksnapshot.cc
|
|||
index f4362e5..2cc8f43 100644
|
||||
--- a/src/snapshot/mksnapshot.cc
|
||||
+++ b/src/snapshot/mksnapshot.cc
|
||||
@@ -97,7 +97,7 @@ class SnapshotWriter {
|
||||
@@ -108,7 +108,7 @@ class SnapshotWriter {
|
||||
}
|
||||
|
||||
FILE* GetFileDescriptorOrDie(const char* filename) {
|
||||
static FILE* GetFileDescriptorOrDie(const char* filename) {
|
||||
- FILE* fp = base::OS::FOpen(filename, "wb");
|
||||
+ FILE* fp = ::fopen(filename, "wb");
|
||||
if (fp == NULL) {
|
||||
i::PrintF("Unable to open file \"%s\" for writing.\n", filename);
|
||||
exit(1);
|
||||
@@ -112,7 +112,7 @@ class SnapshotWriter {
|
||||
@@ -123,7 +123,7 @@ class SnapshotWriter {
|
||||
char* GetExtraCode(char* filename, const char* description) {
|
||||
if (filename == NULL || strlen(filename) == 0) return NULL;
|
||||
::printf("Loading script for %s: %s\n", description, filename);
|
||||
|
|
|
@ -53,29 +53,3 @@ index 6f0e3d5ff5..134ff425e1 100644
|
|||
static size_t find(const String& s, const char* needle) {
|
||||
return s.find(needle);
|
||||
}
|
||||
diff --git a/third_party/inspector_protocol/lib/Parser_cpp.template b/third_party/inspector_protocol/lib/Parser_cpp.template
|
||||
index 4bf6bebc46..f3dde5ac21 100644
|
||||
--- a/third_party/inspector_protocol/lib/Parser_cpp.template
|
||||
+++ b/third_party/inspector_protocol/lib/Parser_cpp.template
|
||||
@@ -51,19 +51,13 @@ double charactersToDouble(const uint16_t* characters, size_t length, bool* ok)
|
||||
buffer.push_back(static_cast<char>(characters[i]));
|
||||
}
|
||||
buffer.push_back('\0');
|
||||
- char* endptr;
|
||||
- double result = std::strtod(buffer.data(), &endptr);
|
||||
- *ok = !(*endptr);
|
||||
- return result;
|
||||
+ return StringUtil::toDouble(buffer.data(), length, ok);
|
||||
}
|
||||
|
||||
double charactersToDouble(const uint8_t* characters, size_t length, bool* ok)
|
||||
{
|
||||
std::string buffer(reinterpret_cast<const char*>(characters), length);
|
||||
- char* endptr;
|
||||
- double result = std::strtod(buffer.data(), &endptr);
|
||||
- *ok = !(*endptr);
|
||||
- return result;
|
||||
+ return StringUtil::toDouble(buffer.data(), length, ok);
|
||||
}
|
||||
|
||||
template<typename Char>
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser
|
|||
index cf3733f..065df39 100644
|
||||
--- a/content/browser/web_contents/web_contents_impl.cc
|
||||
+++ b/content/browser/web_contents/web_contents_impl.cc
|
||||
@@ -1576,6 +1576,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
|
||||
@@ -1581,6 +1581,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
|
||||
std::string unique_name;
|
||||
frame_tree_.root()->SetFrameName(params.main_frame_name, unique_name);
|
||||
|
||||
|
@ -15,7 +15,7 @@ index cf3733f..065df39 100644
|
|||
WebContentsViewDelegate* delegate =
|
||||
GetContentClient()->browser()->GetWebContentsViewDelegate(this);
|
||||
|
||||
@@ -1586,6 +1592,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
|
||||
@@ -1591,6 +1597,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
|
||||
view_.reset(CreateWebContentsView(this, delegate,
|
||||
&render_view_host_delegate_view_));
|
||||
}
|
||||
|
@ -23,22 +23,6 @@ index cf3733f..065df39 100644
|
|||
|
||||
if (browser_plugin_guest_ && !GuestMode::IsCrossProcessFrameGuest(this)) {
|
||||
view_.reset(new WebContentsViewGuest(this, browser_plugin_guest_.get(),
|
||||
@@ -4858,6 +4865,7 @@ void WebContentsImpl::RendererUnresponsive(
|
||||
// We might have been waiting for both beforeunload and unload ACK.
|
||||
// Check if tab is to be unloaded first.
|
||||
if (rfhi->IsWaitingForUnloadACK()) {
|
||||
+#if 0
|
||||
// Hang occurred while firing the unload handler.
|
||||
// Pretend the handler fired so tab closing continues as if it had.
|
||||
GetRenderViewHost()->set_sudden_termination_allowed(true);
|
||||
@@ -4869,6 +4877,7 @@ void WebContentsImpl::RendererUnresponsive(
|
||||
// to recover. Pretend the unload listeners have all fired and close
|
||||
// the tab.
|
||||
Close();
|
||||
+#endif
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/content/browser/web_contents/web_contents_view_guest.cc b/content/browser/web_contents/web_contents_view_guest.cc
|
||||
index a93bc37..70f2f3b 100644
|
||||
--- a/content/browser/web_contents/web_contents_view_guest.cc
|
||||
|
|
|
@ -2,19 +2,19 @@ diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer
|
|||
index 6cfd9df..ec79d1c 100644
|
||||
--- a/content/renderer/renderer_blink_platform_impl.cc
|
||||
+++ b/content/renderer/renderer_blink_platform_impl.cc
|
||||
@@ -997,9 +997,9 @@ RendererBlinkPlatformImpl::createOffscreenGraphicsContext3DProvider(
|
||||
web_attributes.supportStencil || web_attributes.supportAntialias;
|
||||
@@ -1020,9 +1020,9 @@ RendererBlinkPlatformImpl::createOffscreenGraphicsContext3DProvider(
|
||||
web_attributes.support_stencil || web_attributes.support_antialias;
|
||||
attributes.sample_buffers = 0;
|
||||
attributes.bind_generates_resource = false;
|
||||
- // Prefer discrete GPU for WebGL.
|
||||
- attributes.gpu_preference = gl::PreferDiscreteGpu;
|
||||
-
|
||||
+ attributes.gpu_preference = web_attributes.preferIntegratedGpu
|
||||
+ attributes.gpu_preference = web_attributes.prefer_integrated_gpu
|
||||
+ ? gl::PreferIntegratedGpu
|
||||
+ : gl::PreferDiscreteGpu;
|
||||
attributes.fail_if_major_perf_caveat =
|
||||
web_attributes.failIfMajorPerformanceCaveat;
|
||||
DCHECK_GT(web_attributes.webGLVersion, 0u);
|
||||
web_attributes.fail_if_major_performance_caveat;
|
||||
DCHECK_GT(web_attributes.web_gl_version, 0u);
|
||||
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributes.idl b/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributes.idl
|
||||
index 752714c..058b969 100644
|
||||
--- a/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributes.idl
|
||||
|
@ -52,13 +52,13 @@ index 8c07036..223ba31 100644
|
|||
return result;
|
||||
}
|
||||
@@ -26,6 +27,7 @@ Platform::ContextAttributes toPlatformContextAttributes(
|
||||
unsigned webGLVersion,
|
||||
bool supportOwnOffscreenSurface) {
|
||||
unsigned web_gl_version,
|
||||
bool support_own_offscreen_surface) {
|
||||
Platform::ContextAttributes result;
|
||||
+ result.preferIntegratedGpu = attrs.powerPreference() == "low-power";
|
||||
result.failIfMajorPerformanceCaveat = attrs.failIfMajorPerformanceCaveat();
|
||||
result.webGLVersion = webGLVersion;
|
||||
if (supportOwnOffscreenSurface) {
|
||||
+ result.prefer_integrated_gpu = attrs.powerPreference() == "low-power";
|
||||
result.fail_if_major_performance_caveat =
|
||||
attrs.failIfMajorPerformanceCaveat();
|
||||
result.web_gl_version = web_gl_version;
|
||||
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributes.idl b/third_party/WebKit/Source/modules/webgl/WebGLContextAttributes.idl
|
||||
index 9a48073..5196a53 100644
|
||||
--- a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributes.idl
|
||||
|
@ -87,11 +87,11 @@ diff --git a/third_party/WebKit/public/platform/Platform.h b/third_party/WebKit/
|
|||
index 2cd7334..98ecb84 100644
|
||||
--- a/third_party/WebKit/public/platform/Platform.h
|
||||
+++ b/third_party/WebKit/public/platform/Platform.h
|
||||
@@ -458,6 +458,7 @@ class BLINK_PLATFORM_EXPORT Platform {
|
||||
@@ -466,6 +466,7 @@ class BLINK_PLATFORM_EXPORT Platform {
|
||||
// GPU ----------------------------------------------------------------
|
||||
//
|
||||
struct ContextAttributes {
|
||||
+ bool preferIntegratedGpu = false;
|
||||
bool failIfMajorPerformanceCaveat = false;
|
||||
unsigned webGLVersion = 0;
|
||||
+ bool prefer_integrated_gpu = false;
|
||||
bool fail_if_major_performance_caveat = false;
|
||||
unsigned web_gl_version = 0;
|
||||
// Offscreen contexts usually share a surface for the default frame buffer
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/br
|
|||
index 1bfef2c..0ba2260 100644
|
||||
--- a/content/browser/web_contents/web_contents_view_aura.cc
|
||||
+++ b/content/browser/web_contents/web_contents_view_aura.cc
|
||||
@@ -671,6 +671,7 @@ gfx::NativeView WebContentsViewAura::GetRenderWidgetHostViewParent() const {
|
||||
@@ -675,6 +675,7 @@ gfx::NativeView WebContentsViewAura::GetRenderWidgetHostViewParent() const {
|
||||
|
||||
bool WebContentsViewAura::IsValidDragTarget(
|
||||
RenderWidgetHostImpl* target_rwh) const {
|
||||
|
|
|
@ -2,7 +2,7 @@ diff --git a/content/public/renderer/content_renderer_client.h b/content/public/
|
|||
index 0764782..b3cd794 100644
|
||||
--- a/content/public/renderer/content_renderer_client.h
|
||||
+++ b/content/public/renderer/content_renderer_client.h
|
||||
@@ -346,6 +346,11 @@ class CONTENT_EXPORT ContentRendererClient {
|
||||
@@ -361,6 +361,11 @@ class CONTENT_EXPORT ContentRendererClient {
|
||||
virtual void DidInitializeWorkerContextOnWorkerThread(
|
||||
v8::Local<v8::Context> context) {}
|
||||
|
||||
|
@ -18,28 +18,28 @@ diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer
|
|||
index f30b509..6cfd9df 100644
|
||||
--- a/content/renderer/renderer_blink_platform_impl.cc
|
||||
+++ b/content/renderer/renderer_blink_platform_impl.cc
|
||||
@@ -1257,6 +1257,12 @@ RendererBlinkPlatformImpl::trialTokenValidator() {
|
||||
@@ -1282,6 +1282,12 @@ RendererBlinkPlatformImpl::trialTokenValidator() {
|
||||
return &trial_token_validator_;
|
||||
}
|
||||
|
||||
+void RendererBlinkPlatformImpl::workerContextWillDestroy(
|
||||
+void RendererBlinkPlatformImpl::WorkerContextWillDestroy(
|
||||
+ const v8::Local<v8::Context>& worker) {
|
||||
+ GetContentClient()->renderer()->WillDestroyWorkerContextOnWorkerThread(
|
||||
+ worker);
|
||||
+}
|
||||
+
|
||||
void RendererBlinkPlatformImpl::workerContextCreated(
|
||||
void RendererBlinkPlatformImpl::WorkerContextCreated(
|
||||
const v8::Local<v8::Context>& worker) {
|
||||
GetContentClient()->renderer()->DidInitializeWorkerContextOnWorkerThread(
|
||||
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
|
||||
index df62a99..75a3588 100644
|
||||
--- a/content/renderer/renderer_blink_platform_impl.h
|
||||
+++ b/content/renderer/renderer_blink_platform_impl.h
|
||||
@@ -197,6 +197,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
|
||||
@@ -202,6 +202,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
|
||||
|
||||
blink::WebTrialTokenValidator* trialTokenValidator() override;
|
||||
void workerContextCreated(const v8::Local<v8::Context>& worker) override;
|
||||
+ void workerContextWillDestroy(const v8::Local<v8::Context>& worker) override;
|
||||
blink::WebTrialTokenValidator* TrialTokenValidator() override;
|
||||
void WorkerContextCreated(const v8::Local<v8::Context>& worker) override;
|
||||
+ void WorkerContextWillDestroy(const v8::Local<v8::Context>& worker) override;
|
||||
|
||||
// Set the PlatformEventObserverBase in |platform_event_observers_| associated
|
||||
// with |type| to |observer|. If there was already an observer associated to
|
||||
|
@ -47,28 +47,28 @@ diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.cpp b/third_par
|
|||
index e76c01f..560566a 100644
|
||||
--- a/third_party/WebKit/Source/core/workers/WorkerThread.cpp
|
||||
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
|
||||
@@ -512,6 +512,12 @@ void WorkerThread::prepareForShutdownOnWorkerThread() {
|
||||
setExitCode(lock, ExitCode::GracefullyTerminated);
|
||||
@@ -526,6 +526,12 @@ void WorkerThread::prepareForShutdownOnWorkerThread() {
|
||||
SetExitCode(lock, ExitCode::kGracefullyTerminated);
|
||||
}
|
||||
|
||||
+ {
|
||||
+ v8::HandleScope handleScope(isolate());
|
||||
+ Platform::current()->workerContextWillDestroy(
|
||||
+ globalScope()->scriptController()->context());
|
||||
+ v8::HandleScope handle_scope(GetIsolate());
|
||||
+ Platform::Current()->WorkerContextWillDestroy(
|
||||
+ GlobalScope()->ScriptController()->GetContext());
|
||||
+ }
|
||||
+
|
||||
m_inspectorTaskRunner->kill();
|
||||
workerReportingProxy().willDestroyWorkerGlobalScope();
|
||||
probe::allAsyncTasksCanceled(globalScope());
|
||||
inspector_task_runner_->Kill();
|
||||
GetWorkerReportingProxy().WillDestroyWorkerGlobalScope();
|
||||
probe::AllAsyncTasksCanceled(GlobalScope());
|
||||
diff --git a/third_party/WebKit/public/platform/Platform.h b/third_party/WebKit/public/platform/Platform.h
|
||||
index 98ecb84..0779d4a 100644
|
||||
--- a/third_party/WebKit/public/platform/Platform.h
|
||||
+++ b/third_party/WebKit/public/platform/Platform.h
|
||||
@@ -588,6 +588,7 @@ class BLINK_PLATFORM_EXPORT Platform {
|
||||
virtual void didStartWorkerThread() {}
|
||||
virtual void willStopWorkerThread() {}
|
||||
virtual void workerContextCreated(const v8::Local<v8::Context>& worker) {}
|
||||
+ virtual void workerContextWillDestroy(const v8::Local<v8::Context>& worker) {}
|
||||
virtual bool allowScriptExtensionForServiceWorker(const WebURL& scriptUrl) {
|
||||
@@ -596,6 +596,7 @@ class BLINK_PLATFORM_EXPORT Platform {
|
||||
virtual void DidStartWorkerThread() {}
|
||||
virtual void WillStopWorkerThread() {}
|
||||
virtual void WorkerContextCreated(const v8::Local<v8::Context>& worker) {}
|
||||
+ virtual void WorkerContextWillDestroy(const v8::Local<v8::Context>& worker) {}
|
||||
virtual bool AllowScriptExtensionForServiceWorker(const WebURL& script_url) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,11 @@ def main():
|
|||
out_dir = get_output_dir(SOURCE_ROOT, target_arch, component)
|
||||
target = 'chromiumcontent:chromiumcontent'
|
||||
subprocess.check_call([NINJA, '-C', os.path.relpath(out_dir), target], env=env)
|
||||
if component == 'static_library':
|
||||
subenv = env.copy()
|
||||
subenv['CHROMIUMCONTENT_2ND_PASS'] = '1'
|
||||
target = 'chromiumcontent:libs'
|
||||
subprocess.check_call([NINJA, '-C', os.path.relpath(out_dir), target], env=subenv)
|
||||
|
||||
|
||||
def parse_args():
|
||||
|
|
|
@ -3,14 +3,20 @@
|
|||
set -e
|
||||
set -o pipefail
|
||||
|
||||
# Workaround for massive amounts of the following being logged in binutils 2.22:
|
||||
# /usr/bin/arm-linux-gnueabihf-ld: BFD (GNU Binutils for Ubuntu) 2.22 assertion fail ../../bfd/elf32-arm.c:12049
|
||||
#
|
||||
# This should be fixed in binutils 2.2.4, https://sourceware.org/bugzilla/show_bug.cgi?id=14189
|
||||
# and can be removed when CI is upgraded to that version or later.
|
||||
script/cibuild 2>&1 | grep -v "elf32-arm.c:12049"
|
||||
|
||||
# Delete generated archives
|
||||
rm -rf dist
|
||||
rm -rf libchromiumcontent.zip
|
||||
rm -rf libchromiumcontent-static.zip
|
||||
|
||||
docker build \
|
||||
--force-rm \
|
||||
--tag libchromiumcontent-linux \
|
||||
.
|
||||
|
||||
docker run \
|
||||
--rm \
|
||||
--env TARGET_ARCH="$TARGET_ARCH" \
|
||||
--user "$UID" \
|
||||
--volume "$PWD":/workspace/libchromiumcontent \
|
||||
--volume /var/lib/jenkins/config:/config \
|
||||
--workdir /workspace/libchromiumcontent \
|
||||
libchromiumcontent-linux script/cibuild
|
||||
|
|
|
@ -139,6 +139,7 @@ BINARIES_SHARED_LIBRARY = {
|
|||
os.path.join('obj', 'pdf', 'pdf.lib'),
|
||||
os.path.join('obj', 'sandbox', 'win', 'sandbox_cc.pdb'),
|
||||
os.path.join('obj', 'sandbox', 'win', 'sandbox.lib'),
|
||||
os.path.join('obj', 'third_party', 'freetype', 'freetype_c.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'pdfium_cc.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'pdfium.lib'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'fdrm_cc.pdb'),
|
||||
|
@ -167,15 +168,15 @@ BINARIES_SHARED_LIBRARY = {
|
|||
os.path.join('obj', 'third_party', 'pdfium', 'pdfwindow.lib'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'bigint_cc.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'fx_agg_cc.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'fx_freetype_c.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'fx_freetype.lib'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'fx_lcms2_c.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'fx_libopenjpeg_c.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'fx_zlib_c.pdb'),
|
||||
os.path.join('obj', 'third_party', 'pdfium', 'third_party', 'pdfium_base_cc.pdb'),
|
||||
os.path.join('obj', 'third_party', 'webrtc', 'base', 'rtc_base_cc.pdb'),
|
||||
os.path.join('obj', 'third_party', 'webrtc', 'base', 'rtc_base.lib'),
|
||||
os.path.join('obj', 'third_party', 'webrtc', 'base', 'rtc_base_approved_cc.pdb'),
|
||||
os.path.join('obj', 'third_party', 'webrtc', 'base', 'rtc_base_approved.lib'),
|
||||
os.path.join('obj', 'third_party', 'zlib', 'zlib_c.pdb'),
|
||||
os.path.join('obj', 'third_party', 'zlib', 'zlib_x86_simd_c.pdb'),
|
||||
os.path.join('obj', 'ui', 'events', 'dom_keycode_converter_cc.pdb'),
|
||||
os.path.join('obj', 'ui', 'events', 'dom_keycode_converter.lib'),
|
||||
# PDB files for libraries that generated under obj/chromiumcontent:
|
||||
|
@ -285,6 +286,7 @@ GENERATED_INCLUDE_DIRS = [
|
|||
'base',
|
||||
'cc',
|
||||
'content',
|
||||
'device',
|
||||
'gpu',
|
||||
'ipc',
|
||||
'mojo',
|
||||
|
|
|
@ -0,0 +1,651 @@
|
|||
#!/bin/bash -e
|
||||
# Copyright (c) 2012 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.
|
||||
# Script to install everything needed to build chromium (well, ideally, anyway)
|
||||
# See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md
|
||||
usage() {
|
||||
echo "Usage: $0 [--options]"
|
||||
echo "Options:"
|
||||
echo "--[no-]syms: enable or disable installation of debugging symbols"
|
||||
echo "--lib32: enable installation of 32-bit libraries, e.g. for V8 snapshot"
|
||||
echo "--[no-]arm: enable or disable installation of arm cross toolchain"
|
||||
echo "--[no-]chromeos-fonts: enable or disable installation of Chrome OS"\
|
||||
"fonts"
|
||||
echo "--[no-]nacl: enable or disable installation of prerequisites for"\
|
||||
"building standalone NaCl and all its toolchains"
|
||||
echo "--no-prompt: silently select standard options/defaults"
|
||||
echo "--quick-check: quickly try to determine if dependencies are installed"
|
||||
echo " (this avoids interactive prompts and sudo commands,"
|
||||
echo " so might not be 100% accurate)"
|
||||
echo "--unsupported: attempt installation even on unsupported systems"
|
||||
echo "Script will prompt interactively if options not given."
|
||||
exit 1
|
||||
}
|
||||
# Waits for the user to press 'Y' or 'N'. Either uppercase of lowercase is
|
||||
# accepted. Returns 0 for 'Y' and 1 for 'N'. If an optional parameter has
|
||||
# been provided to yes_no(), the function also accepts RETURN as a user input.
|
||||
# The parameter specifies the exit code that should be returned in that case.
|
||||
# The function will echo the user's selection followed by a newline character.
|
||||
# Users can abort the function by pressing CTRL-C. This will call "exit 1".
|
||||
yes_no() {
|
||||
if [ 0 -ne "${do_default-0}" ] ; then
|
||||
[ $1 -eq 0 ] && echo "Y" || echo "N"
|
||||
return $1
|
||||
fi
|
||||
local c
|
||||
while :; do
|
||||
c="$(trap 'stty echo -iuclc icanon 2>/dev/null' EXIT INT TERM QUIT
|
||||
stty -echo iuclc -icanon 2>/dev/null
|
||||
dd count=1 bs=1 2>/dev/null | od -An -tx1)"
|
||||
case "$c" in
|
||||
" 0a") if [ -n "$1" ]; then
|
||||
[ $1 -eq 0 ] && echo "Y" || echo "N"
|
||||
return $1
|
||||
fi
|
||||
;;
|
||||
" 79") echo "Y"
|
||||
return 0
|
||||
;;
|
||||
" 6e") echo "N"
|
||||
return 1
|
||||
;;
|
||||
"") echo "Aborted" >&2
|
||||
exit 1
|
||||
;;
|
||||
*) # The user pressed an unrecognized key. As we are not echoing
|
||||
# any incorrect user input, alert the user by ringing the bell.
|
||||
(tput bel) 2>/dev/null
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
# Checks whether a particular package is available in the repos.
|
||||
# USAGE: $ package_exists <package name>
|
||||
package_exists() {
|
||||
[ ! -z "`apt-cache search --names-only "$1"`" ]
|
||||
}
|
||||
# These default to on because (some) bots need them and it keeps things
|
||||
# simple for the bot setup if all bots just run the script in its default
|
||||
# mode. Developers who don't want stuff they don't need installed on their
|
||||
# own workstations can pass --no-arm --no-nacl when running the script.
|
||||
do_inst_arm=1
|
||||
do_inst_nacl=1
|
||||
while test "$1" != ""
|
||||
do
|
||||
case "$1" in
|
||||
--syms) do_inst_syms=1;;
|
||||
--no-syms) do_inst_syms=0;;
|
||||
--lib32) do_inst_lib32=1;;
|
||||
--arm) do_inst_arm=1;;
|
||||
--no-arm) do_inst_arm=0;;
|
||||
--chromeos-fonts) do_inst_chromeos_fonts=1;;
|
||||
--no-chromeos-fonts) do_inst_chromeos_fonts=0;;
|
||||
--nacl) do_inst_nacl=1;;
|
||||
--no-nacl) do_inst_nacl=0;;
|
||||
--no-prompt) do_default=1
|
||||
do_quietly="-qq --assume-yes"
|
||||
;;
|
||||
--quick-check) do_quick_check=1;;
|
||||
--unsupported) do_unsupported=1;;
|
||||
*) usage;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if test "$do_inst_arm" = "1"; then
|
||||
do_inst_lib32=1
|
||||
fi
|
||||
# Check for lsb_release command in $PATH
|
||||
if ! which lsb_release > /dev/null; then
|
||||
echo "ERROR: lsb_release not found in \$PATH" >&2
|
||||
exit 1;
|
||||
fi
|
||||
distro_codename=$(lsb_release --codename --short)
|
||||
distro_id=$(lsb_release --id --short)
|
||||
supported_codenames="(trusty|xenial|yakkety|zesty)"
|
||||
supported_ids="(Debian)"
|
||||
if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then
|
||||
if [[ ! $distro_codename =~ $supported_codenames &&
|
||||
! $distro_id =~ $supported_ids ]]; then
|
||||
echo -e "ERROR: The only supported distros are\n" \
|
||||
"\tUbuntu 14.04 (trusty)\n" \
|
||||
"\tUbuntu 16.04 (xenial)\n" \
|
||||
"\tUbuntu 16.10 (yakkety)\n" \
|
||||
"\tUbuntu 17.04 (zesty)\n" \
|
||||
"\tDebian 8 (jessie) or later" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! uname -m | egrep -q "i686|x86_64"; then
|
||||
echo "Only x86 architectures are currently supported" >&2
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then
|
||||
echo "Running as non-root user."
|
||||
echo "You might have to enter your password one or more times for 'sudo'."
|
||||
echo
|
||||
fi
|
||||
# Packages needed for chromeos only
|
||||
chromeos_dev_list="libbluetooth-dev libxkbcommon-dev realpath"
|
||||
# Packages needed for development
|
||||
dev_list="\
|
||||
bison
|
||||
cdbs
|
||||
curl
|
||||
dpkg-dev
|
||||
elfutils
|
||||
devscripts
|
||||
fakeroot
|
||||
flex
|
||||
fonts-ipafont
|
||||
fonts-thai-tlwg
|
||||
g++
|
||||
git-core
|
||||
git-svn
|
||||
gperf
|
||||
libasound2-dev
|
||||
libbrlapi-dev
|
||||
libav-tools
|
||||
libbz2-dev
|
||||
libcairo2-dev
|
||||
libcap-dev
|
||||
libcups2-dev
|
||||
libcurl4-gnutls-dev
|
||||
libdrm-dev
|
||||
libelf-dev
|
||||
libffi-dev
|
||||
libgconf2-dev
|
||||
libglib2.0-dev
|
||||
libglu1-mesa-dev
|
||||
libgnome-keyring-dev
|
||||
libgtk2.0-dev
|
||||
libgtk-3-dev
|
||||
libkrb5-dev
|
||||
libnspr4-dev
|
||||
libnss3-dev
|
||||
libpam0g-dev
|
||||
libpci-dev
|
||||
libpulse-dev
|
||||
libsctp-dev
|
||||
libspeechd-dev
|
||||
libsqlite3-dev
|
||||
libssl-dev
|
||||
libudev-dev
|
||||
libwww-perl
|
||||
libxslt1-dev
|
||||
libxss-dev
|
||||
libxt-dev
|
||||
libxtst-dev
|
||||
openbox
|
||||
patch
|
||||
perl
|
||||
pkg-config
|
||||
python
|
||||
python-cherrypy3
|
||||
python-crypto
|
||||
python-dev
|
||||
python-numpy
|
||||
python-opencv
|
||||
python-openssl
|
||||
python-psutil
|
||||
python-yaml
|
||||
rpm
|
||||
ruby
|
||||
subversion
|
||||
ttf-dejavu-core
|
||||
wdiff
|
||||
xcompmgr
|
||||
zip
|
||||
$chromeos_dev_list
|
||||
"
|
||||
# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
|
||||
# NaCl binaries.
|
||||
if file -L /sbin/init | grep -q 'ELF 64-bit'; then
|
||||
dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
|
||||
fi
|
||||
# Run-time libraries required by chromeos only
|
||||
chromeos_lib_list="libpulse0 libbz2-1.0"
|
||||
# Full list of required run-time libraries
|
||||
lib_list="\
|
||||
libatk1.0-0
|
||||
libc6
|
||||
libasound2
|
||||
libcairo2
|
||||
libcap2
|
||||
libcups2
|
||||
libexpat1
|
||||
libffi6
|
||||
libfontconfig1
|
||||
libfreetype6
|
||||
libglib2.0-0
|
||||
libgnome-keyring0
|
||||
libgtk2.0-0
|
||||
libgtk-3-0
|
||||
libpam0g
|
||||
libpango1.0-0
|
||||
libpci3
|
||||
libpcre3
|
||||
libpixman-1-0
|
||||
libspeechd2
|
||||
libstdc++6
|
||||
libsqlite3-0
|
||||
libx11-6
|
||||
libx11-xcb1
|
||||
libxau6
|
||||
libxcb1
|
||||
libxcomposite1
|
||||
libxcursor1
|
||||
libxdamage1
|
||||
libxdmcp6
|
||||
libxext6
|
||||
libxfixes3
|
||||
libxi6
|
||||
libxinerama1
|
||||
libxrandr2
|
||||
libxrender1
|
||||
libxtst6
|
||||
zlib1g
|
||||
$chromeos_lib_list
|
||||
"
|
||||
# Debugging symbols for all of the run-time libraries
|
||||
dbg_list="\
|
||||
libatk1.0-dbg
|
||||
libc6-dbg
|
||||
libcairo2-dbg
|
||||
libffi6-dbg
|
||||
libfontconfig1-dbg
|
||||
libglib2.0-0-dbg
|
||||
libgtk2.0-0-dbg
|
||||
libgtk-3-0-dbg
|
||||
libpango1.0-0-dbg
|
||||
libpcre3-dbg
|
||||
libpixman-1-0-dbg
|
||||
libsqlite3-0-dbg
|
||||
libx11-6-dbg
|
||||
libx11-xcb1-dbg
|
||||
libxau6-dbg
|
||||
libxcb1-dbg
|
||||
libxcomposite1-dbg
|
||||
libxcursor1-dbg
|
||||
libxdamage1-dbg
|
||||
libxdmcp6-dbg
|
||||
libxext6-dbg
|
||||
libxi6-dbg
|
||||
libxinerama1-dbg
|
||||
libxrandr2-dbg
|
||||
libxrender1-dbg
|
||||
libxtst6-dbg
|
||||
zlib1g-dbg
|
||||
"
|
||||
if [[ ! $distro_codename =~ "yakkety" ]]; then
|
||||
dbg_list="${dbg_list} libxfixes3-dbg"
|
||||
fi
|
||||
# Find the proper version of libstdc++6-4.x-dbg.
|
||||
if [ "x$distro_codename" = "xtrusty" ]; then
|
||||
dbg_list="${dbg_list} libstdc++6-4.8-dbg"
|
||||
else
|
||||
dbg_list="${dbg_list} libstdc++6-4.9-dbg"
|
||||
fi
|
||||
# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
|
||||
lib32_list="linux-libc-dev:i386 libpci3:i386"
|
||||
# arm cross toolchain packages needed to build chrome on armhf
|
||||
EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
|
||||
EM_SOURCE=$(cat <<EOF
|
||||
# Repo added by Chromium $0
|
||||
${EM_REPO}
|
||||
# deb-src http://emdebian.org/tools/debian/ jessie main
|
||||
EOF
|
||||
)
|
||||
EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
|
||||
GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
|
||||
case $distro_codename in
|
||||
jessie)
|
||||
eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
|
||||
CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
|
||||
arm_list="libc6-dev:armhf
|
||||
linux-libc-dev:armhf"
|
||||
if test "$do_inst_arm" = "1"; then
|
||||
if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
|
||||
arm_list+=" ${GPP_ARM_PACKAGE}"
|
||||
else
|
||||
echo "The Debian Cross-toolchains repository is necessary to"
|
||||
echo "cross-compile Chromium for arm."
|
||||
echo -n "Do you want me to add it for you (y/N) "
|
||||
if yes_no 1; then
|
||||
gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
|
||||
gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | apt-key add -
|
||||
if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
|
||||
echo "${EM_SOURCE}" | tee -a "${CROSSTOOLS_LIST}" >/dev/null
|
||||
fi
|
||||
arm_list+=" ${GPP_ARM_PACKAGE}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
# All necessary ARM packages are available on the default repos on
|
||||
# Debian 9 and later.
|
||||
*)
|
||||
arm_list="binutils-aarch64-linux-gnu
|
||||
libc6-dev-armhf-cross
|
||||
linux-libc-dev-armhf-cross
|
||||
${GPP_ARM_PACKAGE}"
|
||||
;;
|
||||
esac
|
||||
# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
|
||||
case $distro_codename in
|
||||
trusty)
|
||||
arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
|
||||
gcc-4.8-multilib-arm-linux-gnueabihf"
|
||||
;;
|
||||
xenial|yakkety|zesty)
|
||||
arm_list+=" g++-5-multilib-arm-linux-gnueabihf
|
||||
gcc-5-multilib-arm-linux-gnueabihf
|
||||
gcc-arm-linux-gnueabihf"
|
||||
;;
|
||||
esac
|
||||
# Packages to build NaCl, its toolchains, and its ports.
|
||||
naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
|
||||
nacl_list="\
|
||||
g++-mingw-w64-i686
|
||||
lib32z1-dev
|
||||
libasound2:i386
|
||||
libcap2:i386
|
||||
libelf-dev:i386
|
||||
libfontconfig1:i386
|
||||
libgconf-2-4:i386
|
||||
libglib2.0-0:i386
|
||||
libgpm2:i386
|
||||
libgtk2.0-0:i386
|
||||
libgtk-3-0:i386
|
||||
libncurses5:i386
|
||||
lib32ncurses5-dev
|
||||
libnss3:i386
|
||||
libpango1.0-0:i386
|
||||
libssl-dev:i386
|
||||
libtinfo-dev
|
||||
libtinfo-dev:i386
|
||||
libtool
|
||||
libxcomposite1:i386
|
||||
libxcursor1:i386
|
||||
libxdamage1:i386
|
||||
libxi6:i386
|
||||
libxrandr2:i386
|
||||
libxss1:i386
|
||||
libxtst6:i386
|
||||
texinfo
|
||||
xvfb
|
||||
${naclports_list}
|
||||
"
|
||||
if package_exists libssl1.0.0; then
|
||||
nacl_list="${nacl_list} libssl1.0.0:i386"
|
||||
else
|
||||
nacl_list="${nacl_list} libssl1.0.2:i386"
|
||||
fi
|
||||
# Find the proper version of packages that depend on mesa. Only one -lts variant
|
||||
# of mesa can be installed and everything that depends on it must match.
|
||||
# Query for the name and status of all mesa LTS variants, filter for only
|
||||
# installed packages, extract just the name, and eliminate duplicates (there can
|
||||
# be more than one with the same name in the case of multiarch). Expand into an
|
||||
# array.
|
||||
mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
|
||||
libgl1-mesa-glx-lts-\* 2>/dev/null | \
|
||||
grep " ok installed" | cut -d " " -f 1 | sort -u))
|
||||
if [ "${#mesa_packages[@]}" -eq 0 ]; then
|
||||
mesa_variant=""
|
||||
elif [ "${#mesa_packages[@]}" -eq 1 ]; then
|
||||
# Strip the base package name and leave just "-lts-whatever"
|
||||
mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
|
||||
else
|
||||
echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
|
||||
exit 1
|
||||
fi
|
||||
dev_list="${dev_list} libgbm-dev${mesa_variant}
|
||||
libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
|
||||
mesa-common-dev${mesa_variant}"
|
||||
nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
|
||||
# Some package names have changed over time
|
||||
if package_exists libpng12-0; then
|
||||
lib_list="${lib_list} libpng12-0"
|
||||
else
|
||||
lib_list="${lib_list} libpng16-16"
|
||||
fi
|
||||
if package_exists libnspr4-dbg; then
|
||||
dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
|
||||
lib_list="${lib_list} libnspr4 libnss3"
|
||||
else
|
||||
dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
|
||||
lib_list="${lib_list} libnspr4-0d libnss3-1d"
|
||||
fi
|
||||
if package_exists libjpeg-dev; then
|
||||
dev_list="${dev_list} libjpeg-dev"
|
||||
else
|
||||
dev_list="${dev_list} libjpeg62-dev"
|
||||
fi
|
||||
if package_exists libudev1; then
|
||||
dev_list="${dev_list} libudev1"
|
||||
nacl_list="${nacl_list} libudev1:i386"
|
||||
else
|
||||
dev_list="${dev_list} libudev0"
|
||||
nacl_list="${nacl_list} libudev0:i386"
|
||||
fi
|
||||
if package_exists libbrlapi0.6; then
|
||||
dev_list="${dev_list} libbrlapi0.6"
|
||||
else
|
||||
dev_list="${dev_list} libbrlapi0.5"
|
||||
fi
|
||||
if package_exists apache2-bin; then
|
||||
dev_list="${dev_list} apache2-bin"
|
||||
else
|
||||
dev_list="${dev_list} apache2.2-bin"
|
||||
fi
|
||||
if package_exists xfonts-mathml; then
|
||||
dev_list="${dev_list} xfonts-mathml"
|
||||
fi
|
||||
if package_exists fonts-indic; then
|
||||
dev_list="${dev_list} fonts-indic"
|
||||
else
|
||||
dev_list="${dev_list} ttf-indic-fonts"
|
||||
fi
|
||||
if package_exists php7.0-cgi; then
|
||||
dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
|
||||
else
|
||||
dev_list="${dev_list} php5-cgi libapache2-mod-php5"
|
||||
fi
|
||||
# ttf-mscorefonts-installer is in the Debian contrib repo, which has
|
||||
# dependencies on non-free software. Install it only if the user has already
|
||||
# enabled contrib.
|
||||
if package_exists ttf-mscorefonts-installer; then
|
||||
dev_list="${dev_list} ttf-mscorefonts-installer"
|
||||
elif package_exists msttcorefonts; then
|
||||
dev_list="${dev_list} msttcorefonts"
|
||||
fi
|
||||
# Ubuntu 16.04 has this package deleted.
|
||||
if package_exists ttf-kochi-gothic; then
|
||||
dev_list="${dev_list} ttf-kochi-gothic"
|
||||
fi
|
||||
# Ubuntu 16.04 has this package deleted.
|
||||
if package_exists ttf-kochi-mincho; then
|
||||
dev_list="${dev_list} ttf-kochi-mincho"
|
||||
fi
|
||||
# Some packages are only needed if the distribution actually supports
|
||||
# installing them.
|
||||
if package_exists appmenu-gtk; then
|
||||
lib_list="$lib_list appmenu-gtk"
|
||||
fi
|
||||
# When cross building for arm/Android on 64-bit systems the host binaries
|
||||
# that are part of v8 need to be compiled with -m32 which means
|
||||
# that basic multilib support is needed.
|
||||
if file -L /sbin/init | grep -q 'ELF 64-bit'; then
|
||||
# gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
|
||||
# g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
|
||||
# appropriate value of X and Y by seeing what version the current
|
||||
# distribution's g++-multilib package depends on.
|
||||
multilib_package=$(apt-cache depends g++-multilib --important | \
|
||||
grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
|
||||
lib32_list="$lib32_list $multilib_package"
|
||||
fi
|
||||
if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
|
||||
then
|
||||
echo "This script installs all tools and libraries needed to build Chromium."
|
||||
echo ""
|
||||
echo "For most of the libraries, it can also install debugging symbols, which"
|
||||
echo "will allow you to debug code in the system libraries. Most developers"
|
||||
echo "won't need these symbols."
|
||||
echo -n "Do you want me to install them for you (y/N) "
|
||||
if yes_no 1; then
|
||||
do_inst_syms=1
|
||||
fi
|
||||
fi
|
||||
if test "$do_inst_syms" = "1"; then
|
||||
echo "Including debugging symbols."
|
||||
# Many debug packages are not available in Debian stretch,
|
||||
# so exclude the ones that are missing.
|
||||
available_dbg_packages=""
|
||||
for package in ${dbg_list}; do
|
||||
if package_exists ${package}; then
|
||||
available_dbg_packages="${available_dbg_packages} ${package}"
|
||||
fi
|
||||
done
|
||||
dbg_list="${available_dbg_packages}"
|
||||
else
|
||||
echo "Skipping debugging symbols."
|
||||
dbg_list=
|
||||
fi
|
||||
if test "$do_inst_lib32" = "1" ; then
|
||||
echo "Including 32-bit libraries for ARM/Android."
|
||||
else
|
||||
echo "Skipping 32-bit libraries for ARM/Android."
|
||||
lib32_list=
|
||||
fi
|
||||
if test "$do_inst_arm" = "1" ; then
|
||||
echo "Including ARM cross toolchain."
|
||||
else
|
||||
echo "Skipping ARM cross toolchain."
|
||||
arm_list=
|
||||
fi
|
||||
if test "$do_inst_nacl" = "1"; then
|
||||
echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
|
||||
else
|
||||
echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
|
||||
nacl_list=
|
||||
fi
|
||||
# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
|
||||
# confusing dpkg-query (crbug.com/446172).
|
||||
packages="$(
|
||||
echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
|
||||
"${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
|
||||
)"
|
||||
if [ 1 -eq "${do_quick_check-0}" ] ; then
|
||||
if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
|
||||
# Distinguish between packages that actually aren't available to the
|
||||
# system (i.e. not in any repo) and packages that just aren't known to
|
||||
# dpkg (i.e. managed by apt).
|
||||
missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
|
||||
not_installed=""
|
||||
unknown=""
|
||||
for p in ${missing_packages}; do
|
||||
if apt-cache show ${p} > /dev/null 2>&1; then
|
||||
not_installed="${p}\n${not_installed}"
|
||||
else
|
||||
unknown="${p}\n${unknown}"
|
||||
fi
|
||||
done
|
||||
if [ -n "${not_installed}" ]; then
|
||||
echo "WARNING: The following packages are not installed:"
|
||||
echo -e "${not_installed}" | sed -e "s/^/ /"
|
||||
fi
|
||||
if [ -n "${unknown}" ]; then
|
||||
echo "WARNING: The following packages are unknown to your system"
|
||||
echo "(maybe missing a repo or need to 'sudo apt-get update'):"
|
||||
echo -e "${unknown}" | sed -e "s/^/ /"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
|
||||
dpkg --add-architecture i386
|
||||
fi
|
||||
apt-get update
|
||||
|
||||
# Prevent EULA popup
|
||||
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections
|
||||
|
||||
# We initially run "apt-get" with the --reinstall option and parse its output.
|
||||
# This way, we can find all the packages that need to be newly installed
|
||||
# without accidentally promoting any packages from "auto" to "manual".
|
||||
# We then re-run "apt-get" with just the list of missing packages.
|
||||
echo "Finding missing packages..."
|
||||
# Intentionally leaving $packages unquoted so it's more readable.
|
||||
echo "Packages required: " $packages
|
||||
echo
|
||||
new_list_cmd="apt-get install --reinstall $(echo $packages)"
|
||||
if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
|
||||
# We probably never hit this following line.
|
||||
echo "No missing packages, and the packages are up to date."
|
||||
elif [ $? -eq 1 ]; then
|
||||
# We expect apt-get to have exit status of 1.
|
||||
# This indicates that we cancelled the install with "yes n|".
|
||||
new_list=$(echo "$new_list" |
|
||||
sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
|
||||
new_list=$(echo "$new_list" | sed 's/ *$//')
|
||||
if [ -z "$new_list" ] ; then
|
||||
echo "No missing packages, and the packages are up to date."
|
||||
else
|
||||
echo "Installing missing packages: $new_list."
|
||||
apt-get install ${do_quietly-} ${new_list}
|
||||
fi
|
||||
echo
|
||||
else
|
||||
# An apt-get exit status of 100 indicates that a real error has occurred.
|
||||
# I am intentionally leaving out the '"'s around new_list_cmd,
|
||||
# as this makes it easier to cut and paste the output
|
||||
echo "The following command failed: " ${new_list_cmd}
|
||||
echo
|
||||
echo "It produces the following output:"
|
||||
yes n | $new_list_cmd || true
|
||||
echo
|
||||
echo "You will have to install the above packages yourself."
|
||||
echo
|
||||
exit 100
|
||||
fi
|
||||
# Install the Chrome OS default fonts. This must go after running
|
||||
# apt-get, since install-chromeos-fonts depends on curl.
|
||||
if test "$do_inst_chromeos_fonts" != "0"; then
|
||||
echo
|
||||
echo "Installing Chrome OS fonts."
|
||||
dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
|
||||
if ! $dir/linux/install-chromeos-fonts.py; then
|
||||
echo "ERROR: The installation of the Chrome OS default fonts failed."
|
||||
if [ `stat -f -c %T $dir` == "nfs" ]; then
|
||||
echo "The reason is that your repo is installed on a remote file system."
|
||||
else
|
||||
echo "This is expected if your repo is installed on a remote file system."
|
||||
fi
|
||||
echo "It is recommended to install your repo on a local file system."
|
||||
echo "You can skip the installation of the Chrome OS default founts with"
|
||||
echo "the command line option: --no-chromeos-fonts."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Skipping installation of Chrome OS fonts."
|
||||
fi
|
||||
echo "Installing locales."
|
||||
CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
|
||||
LOCALE_GEN=/etc/locale.gen
|
||||
if [ -e ${LOCALE_GEN} ]; then
|
||||
OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
|
||||
for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
|
||||
sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
|
||||
done
|
||||
# Regenerating locales can take a while, so only do it if we need to.
|
||||
if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
|
||||
echo "Locales already up-to-date."
|
||||
else
|
||||
locale-gen
|
||||
fi
|
||||
else
|
||||
for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
|
||||
locale-gen ${CHROMIUM_LOCALE}
|
||||
done
|
||||
fi
|
|
@ -43,7 +43,7 @@ solutions = [
|
|||
def main():
|
||||
args = parse_args()
|
||||
|
||||
if sys.platform in ['win32', 'cygwin']:
|
||||
if sys.platform == 'win32' and not args.skip_depot_tools_update:
|
||||
update_depot_tools()
|
||||
|
||||
if args.clean and os.path.isdir(SRC_DIR):
|
||||
|
@ -56,7 +56,8 @@ def main():
|
|||
# to 0.
|
||||
# More information: https://stackoverflow.com/a/9935126
|
||||
git_cache = args.git_cache or os.getenv('LIBCHROMIUMCONTENT_GIT_CACHE', '')
|
||||
gclient_sync(chromium_version(), args.clean, git_cache)
|
||||
if not args.skip_gclient:
|
||||
gclient_sync(chromium_version(), args.clean, git_cache)
|
||||
|
||||
if sys.platform == 'linux2':
|
||||
install_sysroot()
|
||||
|
@ -67,7 +68,7 @@ def main():
|
|||
if target_arch == 'arm64':
|
||||
install_aarch64_bintools()
|
||||
|
||||
return (apply_patches() or
|
||||
return (apply_patches(args.skip_patches) or
|
||||
copy_chromiumcontent_files() or
|
||||
update_clang() or
|
||||
run_gn(target_arch, args.defines))
|
||||
|
@ -82,6 +83,12 @@ def parse_args():
|
|||
help='Global git object cache for chromium+ deps')
|
||||
parser.add_argument('--clean', action='store_true',
|
||||
help='Cleans the working directory for full rebuild')
|
||||
parser.add_argument('--skip_patches', action='store_true',
|
||||
help='Skips applying patches, easier to build locally')
|
||||
parser.add_argument('--skip_gclient', action='store_true',
|
||||
help='Skips syncing repo, easier to build locally')
|
||||
parser.add_argument('--skip_depot_tools_update', action='store_true',
|
||||
help='Skips update depot tools on windows, easier to build locally')
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
|
@ -155,9 +162,8 @@ def update_depot_tools():
|
|||
env['TEMP'] = env['TEMP'].rstrip('\\')
|
||||
env['PATH'] = os.pathsep.join([os.path.join(VENDOR_DIR, 'depot_tools'),
|
||||
env['PATH']])
|
||||
cmd_path = env.get('COMSPEC', 'cmd.exe')
|
||||
update_path = os.path.join(VENDOR_DIR, 'depot_tools', 'update_depot_tools.bat')
|
||||
subprocess.check_call([cmd_path, '/c', update_path], env=env)
|
||||
subprocess.check_call([update_path], env=env)
|
||||
|
||||
|
||||
def ensure_gclient_config(git_cache):
|
||||
|
@ -170,6 +176,11 @@ def ensure_gclient_config(git_cache):
|
|||
|
||||
|
||||
def gclient_sync(version, force, git_cache):
|
||||
# Remove untracked files in src.
|
||||
if os.path.exists(os.path.join(SRC_DIR, '.git')):
|
||||
with scoped_cwd(SRC_DIR):
|
||||
subprocess.check_call(['git', 'clean', '-df'])
|
||||
|
||||
ensure_gclient_config(git_cache)
|
||||
env = os.environ.copy()
|
||||
if sys.platform in ['win32', 'cygwin']:
|
||||
|
@ -187,9 +198,11 @@ def gclient_sync(version, force, git_cache):
|
|||
subprocess.check_call(args, env=env)
|
||||
|
||||
|
||||
def apply_patches():
|
||||
return subprocess.call([sys.executable,
|
||||
def apply_patches(skip_patches):
|
||||
return (subprocess.call([sys.executable,
|
||||
os.path.join(SOURCE_ROOT, 'script', 'apply-patches')])
|
||||
if not skip_patches
|
||||
else True)
|
||||
|
||||
|
||||
def update_clang():
|
||||
|
@ -222,6 +235,8 @@ def run_gn(target_arch, defines):
|
|||
args = 'import("//chromiumcontent/args/{0}.gn") target_cpu="{1}"'.format(component, target_cpu)
|
||||
if sys.platform in ['win32', 'cygwin']:
|
||||
args += ' use_experimental_allocator_shim=false'
|
||||
if sys.platform == 'linux2':
|
||||
args += ' use_gtk3=false'
|
||||
output_dir = get_output_dir(SOURCE_ROOT, target_arch, component)
|
||||
subprocess.call([gn, 'gen', os.path.relpath(output_dir, SRC_DIR), '--args=' + args],
|
||||
cwd=SRC_DIR, env=env)
|
||||
|
@ -263,6 +278,16 @@ def mkdir_p(path):
|
|||
raise
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def scoped_cwd(path):
|
||||
cwd = os.getcwd()
|
||||
os.chdir(path)
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
sys.exit(main())
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit c55eecf76bdb96b904aaaee93fe4c67bbbb102d9
|
||||
Subproject commit 4b73b02b36238fe6c8e71b647b0e1367c9ead9cc
|
Загрузка…
Ссылка в новой задаче