Import Cobalt 21.lts.6.305476
diff --git a/src/.pylintrc b/src/.pylintrc
index e167680..b8232b8 100644
--- a/src/.pylintrc
+++ b/src/.pylintrc
@@ -72,6 +72,7 @@
cmp-method,
coerce-builtin,
coerce-method,
+ consider-using-f-string,
delslice-method,
div-method,
duplicate-code,
@@ -118,9 +119,11 @@
old-raise-syntax,
parameter-unpacking,
print-statement,
+ raise-missing-from,
raising-string,
range-builtin-not-iterating,
raw_input-builtin,
+ redundant-u-string-prefix,
rdiv-method,
reduce-builtin,
relative-import,
@@ -129,6 +132,7 @@
setslice-method,
signature-differs,
standarderror-builtin,
+ super-with-arguments,
suppressed-message,
sys-max-int,
too-few-public-methods,
@@ -147,6 +151,8 @@
unicode-builtin,
unnecessary-pass,
unpacking-in-except,
+ unspecified-encoding,
+ use-maxsplit-arg,
useless-else-on-loop,
useless-object-inheritance,
useless-suppression,
diff --git a/src/cobalt/audio/audio_destination_node.cc b/src/cobalt/audio/audio_destination_node.cc
index 6f82ba8..3f0505f 100644
--- a/src/cobalt/audio/audio_destination_node.cc
+++ b/src/cobalt/audio/audio_destination_node.cc
@@ -62,11 +62,15 @@
SB_LOG(INFO) << "Created audio device " << audio_device_.get() << '.';
context()->PreventGarbageCollection();
}
- audio_device_to_delete_ = NULL;
+ delete_audio_device_ = false;
}
void AudioDestinationNode::FillAudioBus(bool all_consumed, AudioBus* audio_bus,
bool* silence) {
+ if (delete_audio_device_) {
+ return;
+ }
+
// This is called on Audio thread.
AudioLock::AutoLock lock(audio_lock());
@@ -74,11 +78,10 @@
DCHECK_EQ(number_of_inputs(), 1u);
bool all_finished = true;
Input(0)->FillAudioBus(audio_bus, silence, &all_finished);
- if (all_consumed && all_finished &&
- audio_device_to_delete_ != audio_device_.get()) {
+ if (all_consumed && all_finished) {
SB_LOG(INFO) << "Schedule to destroy audio device " << audio_device_.get()
<< '.';
- audio_device_to_delete_ = audio_device_.get();
+ delete_audio_device_ = true;
message_loop_->task_runner()->PostTask(
FROM_HERE, base::Bind(&AudioDestinationNode::DestroyAudioDevice,
base::Unretained(this)));
@@ -90,10 +93,11 @@
if (!audio_device_.get()) {
return;
}
- if (audio_device_.get() == audio_device_to_delete_) {
+ if (delete_audio_device_) {
SB_LOG(INFO) << "Destroying audio device " << audio_device_.get() << '.';
audio_device_.reset();
context()->AllowGarbageCollection();
+ delete_audio_device_ = false;
}
}
diff --git a/src/cobalt/audio/audio_destination_node.h b/src/cobalt/audio/audio_destination_node.h
index b758d92..77cee04 100644
--- a/src/cobalt/audio/audio_destination_node.h
+++ b/src/cobalt/audio/audio_destination_node.h
@@ -74,7 +74,7 @@
uint32 max_channel_count_;
std::unique_ptr<AudioDevice> audio_device_;
- AudioDevice* audio_device_to_delete_ = NULL;
+ std::atomic_bool delete_audio_device_ = {false};
DISALLOW_COPY_AND_ASSIGN(AudioDestinationNode);
};
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index bd3b8b4..c0e0577 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-304347
\ No newline at end of file
+305476
\ No newline at end of file
diff --git a/src/cobalt/build/gyp_cobalt b/src/cobalt/build/gyp_cobalt
index b570b65..ecccabd 100755
--- a/src/cobalt/build/gyp_cobalt
+++ b/src/cobalt/build/gyp_cobalt
@@ -113,7 +113,12 @@
logging.error('GYP_DEFINES environment variable is not supported.')
return RETVAL_ERROR
- options.build_number = gyp_utils.GetBuildNumber()
+ build_id_server_url = os.environ.get('BUILD_ID_SERVER_URL')
+ if build_id_server_url:
+ options.build_number = gyp_utils.GetBuildNumber(
+ version_server=build_id_server_url)
+ else:
+ options.build_number = gyp_utils.GetBuildNumber()
try:
gyp_runner = GypRunner(options)
diff --git a/src/cobalt/content/ssl/certs/2e5ac55d.0 b/src/cobalt/content/ssl/certs/2e5ac55d.0
deleted file mode 100644
index b2e43c9..0000000
--- a/src/cobalt/content/ssl/certs/2e5ac55d.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
diff --git a/src/cobalt/debug/remote/devtools/copy_devtools_modules.rsp b/src/cobalt/debug/remote/devtools/copy_devtools_modules.rsp
deleted file mode 100644
index 39ad8b2..0000000
--- a/src/cobalt/debug/remote/devtools/copy_devtools_modules.rsp
+++ /dev/null
@@ -1,476 +0,0 @@
-front_end/network/network.js
-front_end/network/SignedExchangeInfoView.js
-front_end/network/ResourceWebSocketFrameView.js
-front_end/network/RequestTimingView.js
-front_end/network/RequestResponseView.js
-front_end/network/RequestPreviewView.js
-front_end/network/RequestInitiatorView.js
-front_end/network/RequestHeadersView.js
-front_end/network/RequestHTMLView.js
-front_end/network/RequestCookiesView.js
-front_end/network/NetworkWaterfallColumn.js
-front_end/network/NetworkTimeCalculator.js
-front_end/network/NetworkSearchScope.js
-front_end/network/NetworkPanel.js
-front_end/network/NetworkOverview.js
-front_end/network/NetworkManageCustomHeadersView.js
-front_end/network/NetworkLogViewColumns.js
-front_end/network/NetworkLogView.js
-front_end/network/NetworkItemView.js
-front_end/network/NetworkFrameGrouper.js
-front_end/network/NetworkDataGridNode.js
-front_end/network/NetworkConfigView.js
-front_end/network/HARWriter.js
-front_end/network/EventSourceMessagesView.js
-front_end/network/BlockedURLsPane.js
-front_end/network/BinaryResourceView.js
-front_end/test_runner/test_runner.js
-front_end/test_runner/TestRunner.js
-front_end/emulation/emulation.js
-front_end/emulation/SensorsView.js
-front_end/emulation/MediaQueryInspector.js
-front_end/emulation/InspectedPagePlaceholder.js
-front_end/emulation/GeolocationsSettingsTab.js
-front_end/emulation/EmulatedDevices.js
-front_end/emulation/DevicesSettingsTab.js
-front_end/emulation/DeviceModeWrapper.js
-front_end/emulation/DeviceModeView.js
-front_end/emulation/DeviceModeToolbar.js
-front_end/emulation/DeviceModeModel.js
-front_end/emulation/AdvancedApp.js
-front_end/inspector_main/inspector_main.js
-front_end/inspector_main/RenderingOptions.js
-front_end/inspector_main/InspectorMain.js
-front_end/js_main/js_main.js
-front_end/js_main/JsMain.js
-front_end/search/search.js
-front_end/search/SearchView.js
-front_end/search/SearchResultsPane.js
-front_end/search/SearchConfig.js
-front_end/screencast/screencast.js
-front_end/screencast/ScreencastView.js
-front_end/screencast/ScreencastApp.js
-front_end/screencast/InputModel.js
-front_end/performance_monitor/performance_monitor.js
-front_end/performance_monitor/PerformanceMonitor.js
-front_end/main/main.js
-front_end/main/SimpleApp.js
-front_end/main/MainImpl.js
-front_end/main/ExecutionContextSelector.js
-front_end/snippets/snippets.js
-front_end/snippets/SnippetsQuickOpen.js
-front_end/snippets/ScriptSnippetFileSystem.js
-front_end/settings/settings.js
-front_end/settings/SettingsScreen.js
-front_end/settings/FrameworkBlackboxSettingsTab.js
-front_end/security/security.js
-front_end/security/SecurityPanel.js
-front_end/security/SecurityModel.js
-front_end/javascript_metadata/javascript_metadata.js
-front_end/javascript_metadata/NativeFunctions.js
-front_end/javascript_metadata/JavaScriptMetadata.js
-front_end/har_importer/har_importer.js
-front_end/har_importer/HARImporter.js
-front_end/har_importer/HARFormat.js
-front_end/browser_debugger/browser_debugger.js
-front_end/browser_debugger/XHRBreakpointsSidebarPane.js
-front_end/browser_debugger/ObjectEventListenersSidebarPane.js
-front_end/browser_debugger/EventListenerBreakpointsSidebarPane.js
-front_end/browser_debugger/DOMBreakpointsSidebarPane.js
-front_end/layer_viewer/layer_viewer.js
-front_end/layer_viewer/TransformController.js
-front_end/layer_viewer/PaintProfilerView.js
-front_end/layer_viewer/Layers3DView.js
-front_end/layer_viewer/LayerViewHost.js
-front_end/layer_viewer/LayerTreeOutline.js
-front_end/layer_viewer/LayerDetailsView.js
-front_end/cm_web_modes/cm_web_modes.js
-front_end/cm_web_modes/cm_web_modes_cm.js
-front_end/cm_web_modes/cm_web_modes_headless.js
-front_end/cm_web_modes/css.js
-front_end/cm_web_modes/javascript.js
-front_end/cm_web_modes/xml.js
-front_end/cm_web_modes/htmlmixed.js
-front_end/cm_web_modes/htmlembedded.js
-front_end/text_editor/text_editor.js
-front_end/text_editor/TextEditorAutocompleteController.js
-front_end/text_editor/CodeMirrorUtils.js
-front_end/text_editor/CodeMirrorTextEditor.js
-front_end/quick_open/quick_open.js
-front_end/quick_open/QuickOpen.js
-front_end/quick_open/HelpQuickOpen.js
-front_end/quick_open/FilteredListWidget.js
-front_end/quick_open/CommandMenu.js
-front_end/elements/elements.js
-front_end/elements/elements-legacy.js
-front_end/elements/StylesSidebarPane.js
-front_end/elements/StylePropertyTreeElement.js
-front_end/elements/StylePropertyHighlighter.js
-front_end/elements/PropertiesWidget.js
-front_end/elements/PlatformFontsWidget.js
-front_end/elements/NodeStackTraceWidget.js
-front_end/elements/MetricsSidebarPane.js
-front_end/elements/MarkerDecorator.js
-front_end/elements/InspectElementModeController.js
-front_end/elements/EventListenersWidget.js
-front_end/elements/ElementsTreeOutline.js
-front_end/elements/ElementsTreeElement.js
-front_end/elements/ElementsTreeElementHighlighter.js
-front_end/elements/ElementStatePaneWidget.js
-front_end/elements/ElementsSidebarPane.js
-front_end/elements/ElementsPanel.js
-front_end/elements/ElementsBreadcrumbs.js
-front_end/elements/DOMPath.js
-front_end/elements/DOMLinkifier.js
-front_end/elements/ComputedStyleWidget.js
-front_end/elements/ComputedStyleModel.js
-front_end/elements/ColorSwatchPopoverIcon.js
-front_end/elements/ClassesPaneWidget.js
-front_end/timeline_model/timeline_model.js
-front_end/timeline_model/TracingLayerTree.js
-front_end/timeline_model/TimelineProfileTree.js
-front_end/timeline_model/TimelineModel.js
-front_end/timeline_model/TimelineModelFilter.js
-front_end/timeline_model/TimelineJSProfile.js
-front_end/timeline_model/TimelineIRModel.js
-front_end/timeline_model/TimelineFrameModel.js
-front_end/help/help.js
-front_end/help/ReleaseNoteView.js
-front_end/help/ReleaseNoteText.js
-front_end/help/HelpImpl.js
-front_end/workspace_diff/workspace_diff.js
-front_end/workspace_diff/WorkspaceDiff.js
-front_end/mobile_throttling/mobile_throttling.js
-front_end/mobile_throttling/ThrottlingSettingsTab.js
-front_end/mobile_throttling/ThrottlingPresets.js
-front_end/mobile_throttling/ThrottlingManager.js
-front_end/mobile_throttling/NetworkThrottlingSelector.js
-front_end/mobile_throttling/NetworkPanelIndicator.js
-front_end/mobile_throttling/MobileThrottlingSelector.js
-front_end/event_listeners/event_listeners.js
-front_end/event_listeners/EventListenersView.js
-front_end/event_listeners/EventListenersUtils.js
-front_end/object_ui/object_ui.js
-front_end/object_ui/RemoteObjectPreviewFormatter.js
-front_end/object_ui/ObjectPropertiesSection.js
-front_end/object_ui/ObjectPopoverHelper.js
-front_end/object_ui/JavaScriptREPL.js
-front_end/object_ui/JavaScriptAutocomplete.js
-front_end/object_ui/CustomPreviewComponent.js
-front_end/cookie_table/cookie_table.js
-front_end/cookie_table/CookiesTable.js
-front_end/cm_modes/cm_modes.js
-front_end/cm_modes/DefaultCodeMirrorMimeMode.js
-front_end/cm_modes/clike.js
-front_end/cm_modes/coffeescript.js
-front_end/cm_modes/php.js
-front_end/cm_modes/python.js
-front_end/cm_modes/shell.js
-front_end/cm_modes/livescript.js
-front_end/cm_modes/markdown.js
-front_end/cm_modes/clojure.js
-front_end/cm_modes/jsx.js
-front_end/css_overview/css_overview.js
-front_end/css_overview/CSSOverviewUnusedDeclarations.js
-front_end/css_overview/CSSOverviewStartView.js
-front_end/css_overview/CSSOverviewSidebarPanel.js
-front_end/css_overview/CSSOverviewProcessingView.js
-front_end/css_overview/CSSOverviewPanel.js
-front_end/css_overview/CSSOverviewModel.js
-front_end/css_overview/CSSOverviewController.js
-front_end/css_overview/CSSOverviewCompletedView.js
-front_end/console/console.js
-front_end/console/ConsoleContextSelector.js
-front_end/console/ConsoleFilter.js
-front_end/console/ConsoleSidebar.js
-front_end/console/ConsolePanel.js
-front_end/console/ConsolePinPane.js
-front_end/console/ConsolePrompt.js
-front_end/console/ConsoleView.js
-front_end/console/ConsoleViewMessage.js
-front_end/console/ConsoleViewport.js
-front_end/source_frame/source_frame.js
-front_end/source_frame/XMLView.js
-front_end/source_frame/SourcesTextEditor.js
-front_end/source_frame/SourceFrame.js
-front_end/source_frame/source_frame.js
-front_end/source_frame/SourceCodeDiff.js
-front_end/source_frame/ResourceSourceFrame.js
-front_end/source_frame/PreviewFactory.js
-front_end/source_frame/JSONView.js
-front_end/source_frame/ImageView.js
-front_end/source_frame/FontView.js
-front_end/source_frame/BinaryResourceViewFactory.js
-front_end/inline_editor/inline_editor.js
-front_end/inline_editor/SwatchPopoverHelper.js
-front_end/inline_editor/CSSShadowModel.js
-front_end/inline_editor/CSSShadowEditor.js
-front_end/inline_editor/ColorSwatch.js
-front_end/inline_editor/BezierUI.js
-front_end/inline_editor/BezierEditor.js
-front_end/diff/diff.js
-front_end/diff/diff_match_patch.js
-front_end/diff/DiffWrapper.js
-front_end/formatter/formatter.js
-front_end/formatter/ScriptFormatter.js
-front_end/formatter/FormatterWorkerPool.js
-front_end/color_picker/color_picker.js
-front_end/color_picker/Spectrum.js
-front_end/color_picker/ContrastOverlay.js
-front_end/color_picker/ContrastInfo.js
-front_end/color_picker/ContrastDetails.js
-front_end/cm/cm.js
-front_end/cm/active-line.js
-front_end/cm/brace-fold.js
-front_end/cm/closebrackets.js
-front_end/cm/codemirror.js
-front_end/cm/comment.js
-front_end/cm/foldcode.js
-front_end/cm/foldgutter.js
-front_end/cm/mark-selection.js
-front_end/cm/matchbrackets.js
-front_end/cm/multiplex.js
-front_end/cm/overlay.js
-front_end/formatter_worker.unbundled.js
-front_end/heap_snapshot_worker.unbundled.js
-front_end/heap_snapshot_model/heap_snapshot_model.js
-front_end/heap_snapshot_model/HeapSnapshotModel.js
-front_end/heap_snapshot_worker/heap_snapshot_worker.js
-front_end/heap_snapshot_worker/AllocationProfile.js
-front_end/heap_snapshot_worker/HeapSnapshot.js
-front_end/heap_snapshot_worker/HeapSnapshotLoader.js
-front_end/heap_snapshot_worker/HeapSnapshotWorker.js
-front_end/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js
-front_end/text_utils/text_utils.js
-front_end/text_utils/TextUtils.js
-front_end/text_utils/TextRange.js
-front_end/text_utils/Text.js
-front_end/formatter_worker/formatter_worker.js
-front_end/formatter_worker/RelaxedJSONParser.js
-front_end/formatter_worker/JavaScriptOutline.js
-front_end/formatter_worker/JavaScriptFormatter.js
-front_end/formatter_worker/IdentityFormatter.js
-front_end/formatter_worker/HTMLFormatter.js
-front_end/formatter_worker/FormatterWorker.js
-front_end/formatter_worker/FormattedContentBuilder.js
-front_end/formatter_worker/ESTreeWalker.js
-front_end/formatter_worker/CSSRuleParser.js
-front_end/formatter_worker/CSSFormatter.js
-front_end/formatter_worker/AcornTokenizer.js
-front_end/cm_headless/cm_headless.js
-front_end/cm_headless/headlesscodemirror.js
-front_end/data_grid/data_grid.js
-front_end/data_grid/ViewportDataGrid.js
-front_end/data_grid/SortableDataGrid.js
-front_end/data_grid/ShowMoreDataGridNode.js
-front_end/data_grid/DataGrid.js
-front_end/protocol_monitor/protocol_monitor.js
-front_end/protocol_monitor/ProtocolMonitor.js
-front_end/console_counters/console_counters.js
-front_end/console_counters/WarningErrorCounter.js
-front_end/extensions/extensions.js
-front_end/extensions/ExtensionAPI.js
-front_end/extensions/ExtensionPanel.js
-front_end/extensions/ExtensionServer.js
-front_end/extensions/ExtensionTraceProvider.js
-front_end/extensions/ExtensionView.js
-front_end/browser_sdk/browser_sdk.js
-front_end/browser_sdk/LogManager.js
-front_end/persistence/persistence.js
-front_end/persistence/WorkspaceSettingsTab.js
-front_end/persistence/PlatformFileSystem.js
-front_end/persistence/PersistenceUtils.js
-front_end/persistence/PersistenceImpl.js
-front_end/persistence/PersistenceActions.js
-front_end/persistence/NetworkPersistenceManager.js
-front_end/persistence/IsolatedFileSystemManager.js
-front_end/persistence/IsolatedFileSystem.js
-front_end/persistence/FileSystemWorkspaceBinding.js
-front_end/persistence/EditFileSystemView.js
-front_end/persistence/Automapping.js
-front_end/components/components.js
-front_end/components/TargetDetachedDialog.js
-front_end/components/Reload.js
-front_end/components/Linkifier.js
-front_end/components/JSPresentationUtils.js
-front_end/components/ImagePreview.js
-front_end/components/DockController.js
-front_end/bindings/bindings.js
-front_end/bindings/TempFile.js
-front_end/bindings/StylesSourceMapping.js
-front_end/bindings/SASSSourceMapping.js
-front_end/bindings/ResourceUtils.js
-front_end/bindings/ResourceScriptMapping.js
-front_end/bindings/ResourceMapping.js
-front_end/bindings/PresentationConsoleMessageHelper.js
-front_end/bindings/NetworkProject.js
-front_end/bindings/LiveLocation.js
-front_end/bindings/FileUtils.js
-front_end/bindings/DefaultScriptMapping.js
-front_end/bindings/DebuggerWorkspaceBinding.js
-front_end/bindings/CSSWorkspaceBinding.js
-front_end/bindings/ContentProviderBasedProject.js
-front_end/bindings/CompilerScriptMapping.js
-front_end/bindings/BreakpointManager.js
-front_end/bindings/BlackboxManager.js
-front_end/workspace/workspace.js
-front_end/workspace/WorkspaceImpl.js
-front_end/workspace/UISourceCode.js
-front_end/workspace/FileManager.js
-front_end/services/services.js
-front_end/services/ServiceManager.js
-front_end/sdk/sdk.js
-front_end/sdk/TracingModel.js
-front_end/sdk/TracingManager.js
-front_end/sdk/TargetManager.js
-front_end/sdk/Target.js
-front_end/sdk/SourceMapManager.js
-front_end/sdk/SourceMap.js
-front_end/sdk/ServiceWorkerManager.js
-front_end/sdk/ServiceWorkerCacheModel.js
-front_end/sdk/ServerTiming.js
-front_end/sdk/SecurityOriginManager.js
-front_end/sdk/SDKModel.js
-front_end/sdk/Script.js
-front_end/sdk/ScreenCaptureModel.js
-front_end/sdk/RuntimeModel.js
-front_end/sdk/ResourceTreeModel.js
-front_end/sdk/Resource.js
-front_end/sdk/RemoteObject.js
-front_end/sdk/ProfileTreeModel.js
-front_end/sdk/IssuesModel.js
-front_end/sdk/PerformanceMetricsModel.js
-front_end/sdk/PaintProfiler.js
-front_end/sdk/OverlayModel.js
-front_end/sdk/NetworkRequest.js
-front_end/sdk/NetworkManager.js
-front_end/sdk/NetworkLog.js
-front_end/sdk/LogModel.js
-front_end/sdk/LayerTreeBase.js
-front_end/sdk/IsolateManager.js
-front_end/sdk/HeapProfilerModel.js
-front_end/sdk/HARLog.js
-front_end/sdk/FilmStripModel.js
-front_end/sdk/EmulationModel.js
-front_end/sdk/DOMModel.js
-front_end/sdk/DOMDebuggerModel.js
-front_end/sdk/DebuggerModel.js
-front_end/sdk/CSSStyleSheetHeader.js
-front_end/sdk/CSSStyleDeclaration.js
-front_end/sdk/CSSRule.js
-front_end/sdk/CSSProperty.js
-front_end/sdk/CSSModel.js
-front_end/sdk/CSSMetadata.js
-front_end/sdk/CSSMedia.js
-front_end/sdk/CSSMatchedStyles.js
-front_end/sdk/CPUProfilerModel.js
-front_end/sdk/CPUProfileDataModel.js
-front_end/sdk/CookieParser.js
-front_end/sdk/CookieModel.js
-front_end/sdk/CompilerSourceMappingContentProvider.js
-front_end/sdk/ConsoleModel.js
-front_end/sdk/Connections.js
-front_end/sdk/ChildTargetManager.js
-front_end/protocol/protocol.js
-front_end/protocol/NodeURL.js
-front_end/protocol/InspectorBackend.js
-front_end/host/host.js
-front_end/host/UserMetrics.js
-front_end/host/ResourceLoader.js
-front_end/host/Platform.js
-front_end/host/InspectorFrontendHost.js
-front_end/host/InspectorFrontendHostAPI.js
-front_end/dom_extension/DOMExtension.js
-front_end/dom_extension/dom_extension.js
-front_end/root.js
-front_end/Runtime.js
-front_end/platform/utilities.js
-front_end/platform/platform.js
-front_end/ui/ARIAUtils.js
-front_end/ui/ZoomManager.js
-front_end/ui/XWidget.js
-front_end/ui/XLink.js
-front_end/ui/XElement.js
-front_end/ui/Widget.js
-front_end/ui/View.js
-front_end/ui/ViewManager.js
-front_end/ui/UIUtils.js
-front_end/ui/ui.js
-front_end/ui/Treeoutline.js
-front_end/ui/Tooltip.js
-front_end/ui/Toolbar.js
-front_end/ui/ThrottledWidget.js
-front_end/ui/TextPrompt.js
-front_end/ui/TextEditor.js
-front_end/ui/TargetCrashedScreen.js
-front_end/ui/TabbedPane.js
-front_end/ui/SyntaxHighlighter.js
-front_end/ui/SuggestBox.js
-front_end/ui/SplitWidget.js
-front_end/ui/SoftDropDown.js
-front_end/ui/SoftContextMenu.js
-front_end/ui/ShortcutsScreen.js
-front_end/ui/ShortcutRegistry.js
-front_end/ui/SettingsUI.js
-front_end/ui/SegmentedButton.js
-front_end/ui/SearchableView.js
-front_end/ui/RootView.js
-front_end/ui/ResizerWidget.js
-front_end/ui/ReportView.js
-front_end/ui/RemoteDebuggingTerminatedScreen.js
-front_end/ui/ProgressIndicator.js
-front_end/ui/PopoverHelper.js
-front_end/ui/Panel.js
-front_end/ui/ListWidget.js
-front_end/ui/ListModel.js
-front_end/ui/ListControl.js
-front_end/ui/KeyboardShortcut.js
-front_end/ui/InspectorView.js
-front_end/ui/InplaceEditor.js
-front_end/ui/Infobar.js
-front_end/ui/Icon.js
-front_end/ui/HistoryInput.js
-front_end/ui/GlassPane.js
-front_end/ui/Geometry.js
-front_end/ui/Fragment.js
-front_end/ui/ForwardedInputEventHandler.js
-front_end/ui/FilterSuggestionBuilder.js
-front_end/ui/FilterBar.js
-front_end/ui/EmptyWidget.js
-front_end/ui/DropTarget.js
-front_end/ui/Dialog.js
-front_end/ui/ContextMenu.js
-front_end/ui/Context.js
-front_end/ui/ARIAUtils.js
-front_end/ui/ActionRegistry.js
-front_end/ui/Action.js
-front_end/ui/ActionDelegate.js
-front_end/ui/ContextFlavorListener.js
-front_end/root.js
-front_end/common/common.js
-front_end/common/common-legacy.js
-front_end/common/App.js
-front_end/common/AppProvider.js
-front_end/common/CharacterIdMap.js
-front_end/common/Color.js
-front_end/common/ContentProvider.js
-front_end/common/EventTarget.js
-front_end/common/JavaScriptMetaData.js
-front_end/common/Linkifier.js
-front_end/common/Object.js
-front_end/common/Console.js
-front_end/common/ParsedURL.js
-front_end/common/Progress.js
-front_end/common/QueryParamHandler.js
-front_end/common/ResourceType.js
-front_end/common/Revealer.js
-front_end/common/Runnable.js
-front_end/common/SegmentedRange.js
-front_end/common/Settings.js
-front_end/common/StaticContentProvider.js
-front_end/common/StringOutputStream.js
-front_end/common/TextDictionary.js
-front_end/common/Throttler.js
-front_end/common/Trie.js
-front_end/common/UIString.js
-front_end/common/Worker.js
diff --git a/src/cobalt/extension/extension_test.cc b/src/cobalt/extension/extension_test.cc
index 246ef55..178b897 100644
--- a/src/cobalt/extension/extension_test.cc
+++ b/src/cobalt/extension/extension_test.cc
@@ -20,6 +20,7 @@
#include "cobalt/extension/graphics.h"
#include "cobalt/extension/installation_manager.h"
#include "cobalt/extension/javascript_cache.h"
+#include "cobalt/extension/memory_mapped_file.h"
#include "cobalt/extension/platform_service.h"
#include "cobalt/extension/updater_notification.h"
#include "cobalt/extension/url_fetcher_observer.h"
@@ -287,6 +288,26 @@
<< "Extension struct should be a singleton";
}
+TEST(ExtensionTest, MemoryMappedFile) {
+ typedef CobaltExtensionMemoryMappedFileApi ExtensionApi;
+ const char* kExtensionName = kCobaltExtensionMemoryMappedFileName;
+
+ const ExtensionApi* extension_api =
+ static_cast<const ExtensionApi*>(SbSystemGetExtension(kExtensionName));
+ if (!extension_api) {
+ return;
+ }
+
+ EXPECT_STREQ(extension_api->name, kExtensionName);
+ EXPECT_EQ(extension_api->version, 1u);
+ EXPECT_NE(extension_api->MemoryMapFile, nullptr);
+
+ const ExtensionApi* second_extension_api =
+ static_cast<const ExtensionApi*>(SbSystemGetExtension(kExtensionName));
+ EXPECT_EQ(second_extension_api, extension_api)
+ << "Extension struct should be a singleton";
+}
+
} // namespace extension
} // namespace cobalt
#endif // SB_API_VERSION >= 11
diff --git a/src/cobalt/extension/memory_mapped_file.h b/src/cobalt/extension/memory_mapped_file.h
new file mode 100644
index 0000000..7c1c4bb
--- /dev/null
+++ b/src/cobalt/extension/memory_mapped_file.h
@@ -0,0 +1,58 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+#ifndef COBALT_EXTENSION_MEMORY_MAPPED_FILE_H_
+#define COBALT_EXTENSION_MEMORY_MAPPED_FILE_H_
+
+#include <stdint.h>
+
+#include "starboard/memory.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define kCobaltExtensionMemoryMappedFileName \
+ "dev.cobalt.extension.MemoryMappedFile"
+
+typedef struct CobaltExtensionMemoryMappedFileApi {
+ // Name should be the string |kCobaltExtensionMemoryMappedFileName|.
+ // This helps to validate that the extension API is correct.
+ const char* name;
+
+ // This specifies the version of the API that is implemented.
+ uint32_t version;
+
+ // The fields below this point were added in version 1 or later.
+
+ // Memory maps a file at the specified |address| starting at |file_offset|
+ // and mapping |size| bytes. The |address| argument can be NULL in which
+ // case new memory buffer will be allocated. If a non NULL |address| is
+ // passed the memory should be resreved in advance through |SbMemoryMap|.
+ // To release the memory call |SbMemoryUnmap|.
+ // The |file_offset| must be a multiple of |kSbMemoryPageSize|.
+ // Returns NULL or error.
+ void* (*MemoryMapFile)(void* address, const char* path,
+ SbMemoryMapFlags flags, int64_t file_offset,
+ int64_t size);
+
+} CobaltExtensionMemoryMappedFileApi;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // COBALT_EXTENSION_MEMORY_MAPPED_FILE_H_
diff --git a/src/cobalt/h5vcc/dial/dial_http_response.cc b/src/cobalt/h5vcc/dial/dial_http_response.cc
index 6531a3e..3fcd329 100644
--- a/src/cobalt/h5vcc/dial/dial_http_response.cc
+++ b/src/cobalt/h5vcc/dial/dial_http_response.cc
@@ -13,6 +13,7 @@
// limitations under the License.
#include <memory>
+#include <utility>
#include "cobalt/h5vcc/dial/dial_http_response.h"
@@ -24,7 +25,7 @@
namespace dial {
DialHttpResponse::DialHttpResponse(const std::string& path,
const std::string& method)
- : path_(path), method_(method), response_code_(0) {}
+ : path_(path), method_(method), response_code_(500) {}
void DialHttpResponse::AddHeader(const std::string& header,
const std::string& value) {
diff --git a/src/cobalt/renderer/pipeline.cc b/src/cobalt/renderer/pipeline.cc
index 75a5a1e..ee0bbf2 100644
--- a/src/cobalt/renderer/pipeline.cc
+++ b/src/cobalt/renderer/pipeline.cc
@@ -26,10 +26,9 @@
#include "cobalt/base/polymorphic_downcast.h"
#include "cobalt/extension/graphics.h"
#include "cobalt/math/rect_f.h"
-#include "cobalt/render_tree/brush.h"
+#include "cobalt/render_tree/clear_rect_node.h"
#include "cobalt/render_tree/composition_node.h"
#include "cobalt/render_tree/dump_render_tree_to_string.h"
-#include "cobalt/render_tree/rect_node.h"
#include "nb/memory_scope.h"
#include "starboard/system.h"
@@ -66,7 +65,7 @@
// How many entries the rasterize periodic timer will contain before updating.
const size_t kRasterizePeriodicTimerEntriesPerUpdate = 60;
-// The maxiumum numer of entries that the rasterize animations timer can contain
+// The maximum number of entries that the rasterize animations timer can contain
// before automatically updating. In the typical use case, the update will
// occur manually when the animations expire.
const size_t kRasterizeAnimationsTimerMaxEntries = 60;
@@ -660,11 +659,10 @@
render_tree::ColorRGBA clear_color;
if (render_target_ && clear_on_shutdown_mode_ == kClearAccordingToPlatform &&
ShouldClearFrameOnShutdown(&clear_color)) {
- rasterizer_->Submit(new render_tree::RectNode(
- math::RectF(render_target_->GetSize()),
- std::unique_ptr<render_tree::Brush>(
- new render_tree::SolidColorBrush(clear_color))),
- render_target_);
+ rasterizer_->Submit(
+ new render_tree::ClearRectNode(math::RectF(render_target_->GetSize()),
+ clear_color),
+ render_target_);
}
// This potential reference to a render tree whose animations may have ended
diff --git a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontConfigParser_cobalt.cc b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontConfigParser_cobalt.cc
index 4890e72..67fe50a 100644
--- a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontConfigParser_cobalt.cc
+++ b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontConfigParser_cobalt.cc
@@ -324,6 +324,10 @@
LOG(ERROR) << "---- Invalid fallback priority [" << value << "]";
NOTREACHED();
}
+ } else if (name_len == 15 &&
+ strncmp("disable_caching", name, name_len) == 0) {
+ family->disable_caching =
+ strcmp("true", value) == 0 || strcmp("1", value) == 0;
} else {
LOG(ERROR) << "---- Unsupported family attribute [" << name << "]";
NOTREACHED();
diff --git a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.cc b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.cc
index 8d92c16..6862a5e 100644
--- a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.cc
+++ b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.cc
@@ -91,6 +91,7 @@
}
character_map_ = base::MakeRefCounted<font_character_map::CharacterMap>();
+ disable_character_map_ = family_info.disable_caching;
family_name_ = family_info.names[0];
SkTHashMap<SkString, int> styles_index_map;
@@ -392,10 +393,12 @@
<< "(" << style_entry->font_style.weight() << ", "
<< style_entry->font_style.width() << ", "
<< style_entry->font_style.slant() << ")";
+ scoped_refptr<font_character_map::CharacterMap> map =
+ disable_character_map_ ? NULL : character_map_;
style_entry->typeface.reset(new SkTypeface_CobaltStreamProvider(
stream_provider, style_entry->face_index, style_entry->font_style,
style_entry->face_is_fixed_pitch, family_name_,
- style_entry->disable_synthetic_bolding, character_map_));
+ style_entry->disable_synthetic_bolding, map));
} else {
LOG(ERROR) << "Failed to scan font: "
<< style_entry->font_file_path.c_str();
diff --git a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.h b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.h
index 33ec970..774a90f 100644
--- a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.h
+++ b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontStyleSet_cobalt.h
@@ -135,6 +135,9 @@
SkLanguage language_;
font_character_map::PageRanges page_ranges_;
+ // Used when the styles in the styleset have different character mappings.
+ bool disable_character_map_;
+
// NOTE: The following characters require locking when being accessed.
bool is_character_map_generated_;
scoped_refptr<font_character_map::CharacterMap> character_map_;
diff --git a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontUtil_cobalt.h b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontUtil_cobalt.h
index 4f0f1c3..c6a3c97 100644
--- a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontUtil_cobalt.h
+++ b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkFontUtil_cobalt.h
@@ -167,7 +167,8 @@
// determine that a family cannot support a character, without needing to
// generate a full mapping of the family's characters.
struct FontFamilyInfo {
- FontFamilyInfo() : is_fallback_family(true), fallback_priority(0) {}
+ FontFamilyInfo()
+ : is_fallback_family(true), fallback_priority(0), disable_caching(0) {}
SkTArray<SkString> names;
SkTArray<FontFileInfo> fonts;
@@ -175,6 +176,7 @@
bool is_fallback_family;
int fallback_priority;
font_character_map::PageRanges page_ranges;
+ bool disable_caching;
};
#endif // COBALT_RENDERER_RASTERIZER_SKIA_SKIA_SRC_PORTS_SKFONTUTIL_COBALT_H_
diff --git a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkTypeface_cobalt.cc b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkTypeface_cobalt.cc
index 8f9cce8..a116c2c 100644
--- a/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkTypeface_cobalt.cc
+++ b/src/cobalt/renderer/rasterizer/skia/skia/src/ports/SkTypeface_cobalt.cc
@@ -13,6 +13,7 @@
// limitations under the License.
#include <memory>
+#include <utility>
#include "cobalt/renderer/rasterizer/skia/skia/src/ports/SkTypeface_cobalt.h"
@@ -44,16 +45,18 @@
SkGlyphID SkTypeface_Cobalt::characterMapGetGlyphIdForCharacter(
SkUnichar character) const {
- CHECK(character_map_);
-
- // Check whether the character is cached in the character map.
- font_character_map::Character c = character_map_->Find(character);
- if (c.is_set) return c.id;
+ if (character_map_) {
+ // Check whether the character is cached in the character map.
+ font_character_map::Character c = character_map_->Find(character);
+ if (c.is_set) return c.id;
+ }
// If the character isn't there, look it up with FreeType, then cache it.
SkGlyphID glyphs[1] = {0};
SkTypeface_FreeType::onCharsToGlyphs(&character, 1, glyphs);
- character_map_->Insert(character, glyphs[0]);
+ if (character_map_) {
+ character_map_->Insert(character, glyphs[0]);
+ }
return glyphs[0];
}
@@ -119,7 +122,6 @@
*face_index = face_index_;
return std::unique_ptr<SkFileMemoryChunkStream>(
stream_provider_->OpenStream());
- ;
}
size_t SkTypeface_CobaltStreamProvider::GetStreamLength() const {
diff --git a/src/cobalt/version.h b/src/cobalt/version.h
index e014a72..738430b 100644
--- a/src/cobalt/version.h
+++ b/src/cobalt/version.h
@@ -35,6 +35,6 @@
// release is cut.
//.
-#define COBALT_VERSION "21.lts.5"
+#define COBALT_VERSION "21.lts.6"
#endif // COBALT_VERSION_H_
diff --git a/src/starboard/android/shared/media_is_video_supported.cc b/src/starboard/android/shared/media_is_video_supported.cc
index 332e4b2..202adc8 100644
--- a/src/starboard/android/shared/media_is_video_supported.cc
+++ b/src/starboard/android/shared/media_is_video_supported.cc
@@ -42,13 +42,13 @@
return false;
}
JniEnvExt* env = JniEnvExt::Get();
+ ScopedLocalJavaRef<jstring> j_mime(env->NewStringStandardUTFOrAbort(mime));
// An HDR capable VP9 or AV1 decoder is needed to handle HDR at all.
bool has_hdr_capable_decoder =
JniEnvExt::Get()->CallStaticBooleanMethodOrAbort(
"dev/cobalt/media/MediaCodecUtil", "hasHdrCapableVideoDecoder",
- "(Ljava/lang/String;)Z",
- env->NewStringStandardUTFOrAbort(mime)) == JNI_TRUE;
+ "(Ljava/lang/String;)Z", j_mime.Get()) == JNI_TRUE;
if (!has_hdr_capable_decoder) {
return false;
}
diff --git a/src/starboard/build/collect_deploy_content.gypi b/src/starboard/build/collect_deploy_content.gypi
index a9a5064..6bee14a 100644
--- a/src/starboard/build/collect_deploy_content.gypi
+++ b/src/starboard/build/collect_deploy_content.gypi
@@ -46,11 +46,6 @@
'collect_deploy_content_extra_args': [ '--use_absolute_symlinks' ],
}
}],
- ['cobalt_docker_build == 1 and host_os == "win"', {
- 'variables': {
- 'collect_deploy_content_extra_args': [ '--copy_override' ],
- }
- }],
],
'actions': [{
'action_name': 'collect_deploy_content',
diff --git a/src/starboard/build/collect_deploy_content.py b/src/starboard/build/collect_deploy_content.py
index 49bf9af..bc548cc 100644
--- a/src/starboard/build/collect_deploy_content.py
+++ b/src/starboard/build/collect_deploy_content.py
@@ -12,16 +12,15 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Builds a symlink farm pointing to specified subdirectories of the input dir."""
+"""Builds a symlink farm pointing to specified subdirs of the input dir."""
import argparse
import logging
import os
-import shutil
import sys
import _env # pylint: disable=unused-import
-import starboard.tools.port_symlink as port_symlink
+from starboard.tools import port_symlink
# The name of an environment variable that when set to |'1'|, signals to us that
# we should log all output directories that we have populated.
@@ -40,21 +39,6 @@
port_symlink.Rmtree(path)
-def _CopyTree(src_path, dst_path):
- """
- Copy tree with a safeguard for windows long path (>260).
- On Windows Python is facing long path limitation, for more details see
- https://bugs.python.org/issue27730
- """
- if os.sep == r'\\':
- prefix = r'\\\\?\\'
- if prefix not in src_path:
- src_path = prefix + src_path
- if prefix not in dst_path:
- dst_path = prefix + dst_path
- shutil.copytree(src_path, dst_path)
-
-
def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument(
@@ -75,11 +59,6 @@
metavar='subdirs',
nargs='*',
help='subdirectories within both the input and output directories')
- parser.add_argument(
- '--copy_override',
- action='store_true',
- help='Overrides the behavior of collect_deploy_content to copy files, '
- 'instead of symlinking them.')
options = parser.parse_args(argv[1:])
if os.environ.get(_SHOULD_LOG_ENV_KEY, None) == '1':
@@ -128,9 +107,7 @@
msg += ' path points to an unknown type'
logging.error(msg)
- if options.copy_override:
- _CopyTree(src_path, dst_path)
- elif options.use_absolute_symlinks:
+ if options.use_absolute_symlinks:
port_symlink.MakeSymLink(
target_path=os.path.abspath(src_path),
link_path=os.path.abspath(dst_path))
diff --git a/src/starboard/elf_loader/elf_header_test.cc b/src/starboard/elf_loader/elf_header_test.cc
index b58c2a9..e6feea5 100644
--- a/src/starboard/elf_loader/elf_header_test.cc
+++ b/src/starboard/elf_loader/elf_header_test.cc
@@ -14,6 +14,8 @@
#include "starboard/elf_loader/elf_header.h"
+#include <string>
+
#include "starboard/common/scoped_ptr.h"
#include "starboard/elf_loader/file.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -30,7 +32,10 @@
public:
DummyFile(const char* buffer, int size) : buffer_(buffer), size_(size) {}
- bool Open(const char* name) { return true; }
+ bool Open(const char* name) {
+ name_ = name;
+ return true;
+ }
bool ReadFromOffset(int64_t offset, char* buffer, int size) {
SB_LOG(INFO) << "ReadFromOffset";
if (offset != 0) {
@@ -46,9 +51,12 @@
}
void Close() {}
+ const std::string& GetName() { return name_; }
+
private:
const char* buffer_;
int size_;
+ std::string name_;
};
class ElfHeaderTest : public ::testing::Test {
diff --git a/src/starboard/elf_loader/elf_loader.gyp b/src/starboard/elf_loader/elf_loader.gyp
index af34367..8417649 100644
--- a/src/starboard/elf_loader/elf_loader.gyp
+++ b/src/starboard/elf_loader/elf_loader.gyp
@@ -139,6 +139,7 @@
],
'dependencies': [
'elf_loader_sys',
+ '<(DEPTH)/starboard/elf_loader/sabi_string.gyp:sabi_string',
'<(DEPTH)/starboard/starboard.gyp:starboard',
],
'sources': [
diff --git a/src/starboard/elf_loader/elf_loader_impl.cc b/src/starboard/elf_loader/elf_loader_impl.cc
index 3bfc632..9afb791 100644
--- a/src/starboard/elf_loader/elf_loader_impl.cc
+++ b/src/starboard/elf_loader/elf_loader_impl.cc
@@ -46,7 +46,18 @@
SB_DLOG(INFO) << "Loaded ELF header";
- program_table_.reset(new ProgramTable());
+ const auto* memory_mapped_file_extension =
+ reinterpret_cast<const CobaltExtensionMemoryMappedFileApi*>(
+ SbSystemGetExtension(kCobaltExtensionMemoryMappedFileName));
+ if (memory_mapped_file_extension &&
+ SbStringCompareAll(memory_mapped_file_extension->name,
+ kCobaltExtensionMemoryMappedFileName) == 0 &&
+ memory_mapped_file_extension->version >= 1) {
+ program_table_.reset(new ProgramTable(memory_mapped_file_extension));
+ } else {
+ program_table_.reset(new ProgramTable(nullptr));
+ }
+
program_table_->LoadProgramHeader(elf_header_loader_->GetHeader(),
elf_file_.get());
diff --git a/src/starboard/elf_loader/file.h b/src/starboard/elf_loader/file.h
index 90296e7..a25e8bc 100644
--- a/src/starboard/elf_loader/file.h
+++ b/src/starboard/elf_loader/file.h
@@ -17,6 +17,8 @@
#include "starboard/elf_loader/elf.h"
+#include <string>
+
namespace starboard {
namespace elf_loader {
@@ -35,6 +37,9 @@
// Closes the underlying file.
virtual void Close() = 0;
+ // Returns the name of the file.
+ virtual const std::string& GetName() = 0;
+
virtual ~File() {}
};
diff --git a/src/starboard/elf_loader/file_impl.cc b/src/starboard/elf_loader/file_impl.cc
index 94ee465..951db5f 100644
--- a/src/starboard/elf_loader/file_impl.cc
+++ b/src/starboard/elf_loader/file_impl.cc
@@ -39,6 +39,7 @@
bool FileImpl::Open(const char* name) {
SB_DLOG(INFO) << "Loading: " << name;
+ name_ = name;
file_ = SbFileOpen(name, kSbFileOpenOnly | kSbFileRead, NULL, NULL);
if (!file_) {
return false;
@@ -72,5 +73,9 @@
}
}
+const std::string& FileImpl::GetName() {
+ return name_;
+}
+
} // namespace elf_loader
} // namespace starboard
diff --git a/src/starboard/elf_loader/file_impl.h b/src/starboard/elf_loader/file_impl.h
index 9407c95..988a554 100644
--- a/src/starboard/elf_loader/file_impl.h
+++ b/src/starboard/elf_loader/file_impl.h
@@ -20,6 +20,8 @@
#include "starboard/elf_loader/file.h"
#include "starboard/file.h"
+#include <string>
+
namespace starboard {
namespace elf_loader {
@@ -31,9 +33,11 @@
bool Open(const char* name);
bool ReadFromOffset(int64_t offset, char* buffer, int size);
void Close();
+ const std::string& GetName() override;
private:
SbFile file_;
+ std::string name_;
SB_DISALLOW_COPY_AND_ASSIGN(FileImpl);
};
diff --git a/src/starboard/elf_loader/program_table.cc b/src/starboard/elf_loader/program_table.cc
index 425c16d..079253a 100644
--- a/src/starboard/elf_loader/program_table.cc
+++ b/src/starboard/elf_loader/program_table.cc
@@ -34,14 +34,16 @@
namespace starboard {
namespace elf_loader {
-ProgramTable::ProgramTable()
+ProgramTable::ProgramTable(
+ const CobaltExtensionMemoryMappedFileApi* memory_mapped_file_extension)
: phdr_num_(0),
phdr_mmap_(NULL),
phdr_table_(NULL),
phdr_size_(0),
load_start_(NULL),
load_size_(0),
- base_memory_address_(0) {}
+ base_memory_address_(0),
+ memory_mapped_file_extension_(memory_mapped_file_extension) {}
bool ProgramTable::LoadProgramHeader(const Ehdr* elf_header, File* elf_file) {
if (!elf_header) {
@@ -76,39 +78,52 @@
SB_DLOG(INFO) << "page_max - page_min=" << page_max - page_min;
-#if SB_API_VERSION >= 12 || SB_HAS(MMAP)
- phdr_mmap_ =
- SbMemoryMap(phdr_size_, kSbMemoryMapProtectWrite, "program_header");
- if (!phdr_mmap_) {
- SB_LOG(ERROR) << "Failed to allocate memory";
- return false;
- }
+ if (memory_mapped_file_extension_) {
+ SB_DLOG(INFO) << "Memory mapped file for the program header";
+ phdr_mmap_ = memory_mapped_file_extension_->MemoryMapFile(
+ NULL, elf_file->GetName().c_str(), kSbMemoryMapProtectRead, page_min,
+ phdr_size_);
+ if (!phdr_mmap_) {
+ SB_LOG(ERROR) << "Failed to memory map the program header";
+ return false;
+ }
- SB_DLOG(INFO) << "Allocated address=" << phdr_mmap_;
-#else
- SB_CHECK(false);
-#endif
- if (!elf_file->ReadFromOffset(page_min, reinterpret_cast<char*>(phdr_mmap_),
- phdr_size_)) {
- SB_LOG(ERROR) << "Failed to read program header from file offset: "
- << page_min;
- return false;
- }
+ SB_DLOG(INFO) << "Allocated address=" << phdr_mmap_;
+ } else {
#if SB_API_VERSION >= 12 || SB_HAS(MMAP)
- bool mp_result =
- SbMemoryProtect(phdr_mmap_, phdr_size_, kSbMemoryMapProtectRead);
- SB_DLOG(INFO) << "mp_result=" << mp_result;
- if (!mp_result) {
- SB_LOG(ERROR) << "Failed to protect program header";
- return false;
- }
+ phdr_mmap_ =
+ SbMemoryMap(phdr_size_, kSbMemoryMapProtectWrite, "program_header");
+ if (!phdr_mmap_) {
+ SB_LOG(ERROR) << "Failed to allocate memory";
+ return false;
+ }
+
+ SB_DLOG(INFO) << "Allocated address=" << phdr_mmap_;
#else
- SB_CHECK(false);
+ SB_CHECK(false);
#endif
+ if (!elf_file->ReadFromOffset(page_min, reinterpret_cast<char*>(phdr_mmap_),
+ phdr_size_)) {
+ SB_LOG(ERROR) << "Failed to read program header from file offset: "
+ << page_min;
+ return false;
+ }
+#if SB_API_VERSION >= 12 || SB_HAS(MMAP)
+ bool mp_result =
+ SbMemoryProtect(phdr_mmap_, phdr_size_, kSbMemoryMapProtectRead);
+ SB_DLOG(INFO) << "mp_result=" << mp_result;
+ if (!mp_result) {
+ SB_LOG(ERROR) << "Failed to protect program header";
+ return false;
+ }
+#else
+ SB_CHECK(false);
+#endif
+ }
phdr_table_ = reinterpret_cast<Phdr*>(reinterpret_cast<char*>(phdr_mmap_) +
page_offset);
-
+ SB_DLOG(INFO) << "phdr_table_=" << phdr_table_;
return true;
}
@@ -185,20 +200,33 @@
SB_DLOG(INFO) << "segment prot_flags=" << std::hex << prot_flags;
void* seg_addr = reinterpret_cast<void*>(seg_page_start);
- bool mp_ret =
- SbMemoryProtect(seg_addr, file_length, kSbMemoryMapProtectWrite);
- SB_DLOG(INFO) << "segment vaddress=" << seg_addr;
+ bool mp_ret = false;
+ if (memory_mapped_file_extension_) {
+ SB_DLOG(INFO) << "Using Memory Mapped File for Loading the Segment";
+ void* p = memory_mapped_file_extension_->MemoryMapFile(
+ seg_addr, elf_file->GetName().c_str(), kSbMemoryMapProtectRead,
+ file_page_start, file_length);
+ if (!p) {
+ SB_LOG(ERROR) << "Failed to memory map file: " << elf_file->GetName();
+ return false;
+ }
+ } else {
+ SB_DLOG(INFO) << "Not using Memory Mapped Files";
+ mp_ret =
+ SbMemoryProtect(seg_addr, file_length, kSbMemoryMapProtectWrite);
+ SB_DLOG(INFO) << "segment vaddress=" << seg_addr;
- if (!mp_ret) {
- SB_LOG(ERROR) << "Failed to unprotect segment";
- return false;
- }
- if (!elf_file->ReadFromOffset(file_page_start,
- reinterpret_cast<char*>(seg_addr),
- file_length)) {
- SB_DLOG(INFO) << "Failed to read segment from file offset: "
- << file_page_start;
- return false;
+ if (!mp_ret) {
+ SB_LOG(ERROR) << "Failed to unprotect segment";
+ return false;
+ }
+ if (!elf_file->ReadFromOffset(file_page_start,
+ reinterpret_cast<char*>(seg_addr),
+ file_length)) {
+ SB_DLOG(INFO) << "Failed to read segment from file offset: "
+ << file_page_start;
+ return false;
+ }
}
mp_ret = SbMemoryProtect(seg_addr, file_length, prot_flags);
SB_DLOG(INFO) << "mp_ret=" << mp_ret;
@@ -313,7 +341,7 @@
SB_DLOG(INFO) << "Reading at vaddr: " << phdr->p_vaddr;
*dynamic = reinterpret_cast<Dyn*>(base_memory_address_ + phdr->p_vaddr);
if (dynamic_count) {
- *dynamic_count = (size_t)(phdr->p_memsz / sizeof(Dyn));
+ *dynamic_count = static_cast<size_t>((phdr->p_memsz / sizeof(Dyn)));
}
if (dynamic_flags) {
*dynamic_flags = phdr->p_flags;
diff --git a/src/starboard/elf_loader/program_table.h b/src/starboard/elf_loader/program_table.h
index d08301c..be81458 100644
--- a/src/starboard/elf_loader/program_table.h
+++ b/src/starboard/elf_loader/program_table.h
@@ -17,6 +17,7 @@
#include <vector>
+#include "cobalt/extension/memory_mapped_file.h"
#include "starboard/elf_loader/elf.h"
#include "starboard/elf_loader/file.h"
@@ -36,7 +37,8 @@
class ProgramTable {
public:
- ProgramTable();
+ explicit ProgramTable(
+ const CobaltExtensionMemoryMappedFileApi* memory_mapped_file_extension);
// Loads the program header.
bool LoadProgramHeader(const Ehdr* elf_header, File* elf_file);
@@ -90,6 +92,8 @@
// from the ELF file are offsets from this address.
Addr base_memory_address_;
+ const CobaltExtensionMemoryMappedFileApi* memory_mapped_file_extension_;
+
SB_DISALLOW_COPY_AND_ASSIGN(ProgramTable);
};
diff --git a/src/starboard/elf_loader/program_table_test.cc b/src/starboard/elf_loader/program_table_test.cc
index e1716f3..d8f728c 100644
--- a/src/starboard/elf_loader/program_table_test.cc
+++ b/src/starboard/elf_loader/program_table_test.cc
@@ -14,6 +14,7 @@
#include "starboard/elf_loader/program_table.h"
+#include <string>
#include <vector>
#include "starboard/common/scoped_ptr.h"
@@ -41,7 +42,11 @@
explicit DummyFile(const std::vector<FileChunk>& file_chunks)
: file_chunks_(file_chunks), read_index_(0) {}
- bool Open(const char* name) { return true; }
+ bool Open(const char* name) {
+ name_ = name;
+ return true;
+ }
+
bool ReadFromOffset(int64_t offset, char* buffer, int size) {
SB_LOG(INFO) << "ReadFromOffset offset=" << offset << " size=" << size
<< " read_index_=" << read_index_;
@@ -64,18 +69,19 @@
return true;
}
void Close() {}
-
+ const std::string& GetName() { return name_; }
private:
int file_offset_;
const char* buffer_;
int size_;
std::vector<FileChunk> file_chunks_;
int read_index_;
+ std::string name_;
};
class ProgramTableTest : public ::testing::Test {
protected:
- ProgramTableTest() { program_table_.reset(new ProgramTable()); }
+ ProgramTableTest() { program_table_.reset(new ProgramTable(nullptr)); }
~ProgramTableTest() {}
void HelperMethod() {}
diff --git a/src/starboard/linux/shared/BUILD.gn b/src/starboard/linux/shared/BUILD.gn
index 73fe377..fe59192 100644
--- a/src/starboard/linux/shared/BUILD.gn
+++ b/src/starboard/linux/shared/BUILD.gn
@@ -371,6 +371,8 @@
"//starboard/shared/posix/log_is_tty.cc",
"//starboard/shared/posix/log_raw.cc",
"//starboard/shared/posix/memory_flush.cc",
+ "//starboard/shared/posix/memory_mapped_file.cc",
+ "//starboard/shared/posix/memory_mapped_file.h",
"//starboard/shared/posix/set_non_blocking_internal.cc",
"//starboard/shared/posix/socket_accept.cc",
"//starboard/shared/posix/socket_bind.cc",
diff --git a/src/starboard/linux/shared/starboard_platform.gypi b/src/starboard/linux/shared/starboard_platform.gypi
index d2cc26a..5d48e02 100644
--- a/src/starboard/linux/shared/starboard_platform.gypi
+++ b/src/starboard/linux/shared/starboard_platform.gypi
@@ -142,6 +142,8 @@
'<(DEPTH)/starboard/shared/posix/log_is_tty.cc',
'<(DEPTH)/starboard/shared/posix/log_raw.cc',
'<(DEPTH)/starboard/shared/posix/memory_flush.cc',
+ '<(DEPTH)/starboard/shared/posix/memory_mapped_file.cc',
+ '<(DEPTH)/starboard/shared/posix/memory_mapped_file.h',
'<(DEPTH)/starboard/shared/posix/set_non_blocking_internal.cc',
'<(DEPTH)/starboard/shared/posix/socket_accept.cc',
'<(DEPTH)/starboard/shared/posix/socket_bind.cc',
diff --git a/src/starboard/linux/shared/system_get_extensions.cc b/src/starboard/linux/shared/system_get_extensions.cc
index 390aa38..f56a6e5 100644
--- a/src/starboard/linux/shared/system_get_extensions.cc
+++ b/src/starboard/linux/shared/system_get_extensions.cc
@@ -16,7 +16,9 @@
#include "cobalt/extension/configuration.h"
#include "cobalt/extension/crash_handler.h"
+#include "cobalt/extension/memory_mapped_file.h"
#include "starboard/common/string.h"
+#include "starboard/shared/posix/memory_mapped_file.h"
#include "starboard/shared/starboard/crash_handler.h"
#if SB_IS(EVERGREEN_COMPATIBLE)
#include "starboard/elf_loader/evergreen_config.h"
@@ -41,5 +43,8 @@
if (SbStringCompareAll(name, kCobaltExtensionCrashHandlerName) == 0) {
return starboard::common::GetCrashHandlerApi();
}
+ if (SbStringCompareAll(name, kCobaltExtensionMemoryMappedFileName) == 0) {
+ return starboard::shared::posix::GetMemoryMappedFileApi();
+ }
return NULL;
}
diff --git a/src/starboard/shared/dlmalloc/page_internal.h b/src/starboard/shared/dlmalloc/page_internal.h
index b4df31f..e72fd75 100644
--- a/src/starboard/shared/dlmalloc/page_internal.h
+++ b/src/starboard/shared/dlmalloc/page_internal.h
@@ -19,6 +19,7 @@
#ifndef STARBOARD_SHARED_DLMALLOC_PAGE_INTERNAL_H_
#define STARBOARD_SHARED_DLMALLOC_PAGE_INTERNAL_H_
+#include "starboard/memory.h"
#include "starboard/shared/internal_only.h"
#include "starboard/types.h"
@@ -115,6 +116,17 @@
// allocated by dlmalloc isn't counted twice.
void* SbPageMapUntracked(size_t size_bytes, int flags, const char* name);
+// Memory maps a file to the specified |addr| starting with |file_offset| and
+// mapping |size| bytes. The |addr| should be reserved before calling. If
+// NULL |addr| is passed a new memory block would be allocated and the address
+// returned. The file_offset must be a multiple of |kSbMemoryPageSize|.
+// On error returns NULL.
+void* SbPageMapFile(void* addr,
+ const char* path,
+ SbMemoryMapFlags flags,
+ int64_t file_offset,
+ int64_t size);
+
// Unmap |size_bytes| of physical pages starting from |virtual_address|,
// returning true on success. After this, [virtual_address, virtual_address +
// size_bytes) will not be read/writable. SbUnmap() can unmap multiple
diff --git a/src/starboard/shared/linux/page_internal.cc b/src/starboard/shared/linux/page_internal.cc
index bd8c444..5e9c4a4 100644
--- a/src/starboard/shared/linux/page_internal.cc
+++ b/src/starboard/shared/linux/page_internal.cc
@@ -17,8 +17,10 @@
#include "starboard/shared/dlmalloc/page_internal.h"
+#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
+#include <unistd.h>
#include "starboard/atomic.h"
#include "starboard/common/log.h"
@@ -85,6 +87,38 @@
return mem;
}
+void* SbPageMapFile(void* addr,
+ const char* path,
+ SbMemoryMapFlags flags,
+ int64_t file_offset,
+ int64_t size) {
+ int fd = open(path, O_RDONLY);
+ if (fd == -1) {
+ return nullptr;
+ }
+
+ void* p = nullptr;
+ if (addr != nullptr) {
+ p = mmap(addr, size, SbMemoryMapFlagsToMmapProtect(flags),
+ MAP_PRIVATE | MAP_FIXED, fd, file_offset);
+ if (p == MAP_FAILED) {
+ close(fd);
+ return nullptr;
+ }
+ } else {
+ p = mmap(addr, size, SbMemoryMapFlagsToMmapProtect(flags), MAP_PRIVATE, fd,
+ file_offset);
+ if (p == MAP_FAILED) {
+ close(fd);
+ return nullptr;
+ }
+ }
+ // It is OK to close the file descriptor as the memory
+ // mapping keeps the file open.
+ close(fd);
+ return p;
+}
+
bool SbPageUnmap(void* ptr, size_t size_bytes) {
SbAtomicNoBarrier_Increment(&s_tracked_page_count, -GetPageCount(size_bytes));
return SbPageUnmapUntracked(ptr, size_bytes);
diff --git a/src/starboard/shared/posix/memory_mapped_file.cc b/src/starboard/shared/posix/memory_mapped_file.cc
new file mode 100644
index 0000000..d9a3dfb
--- /dev/null
+++ b/src/starboard/shared/posix/memory_mapped_file.cc
@@ -0,0 +1,39 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/shared/posix/memory_mapped_file.h"
+
+#include "cobalt/extension/memory_mapped_file.h"
+#include "starboard/common/log.h"
+#include "starboard/shared/dlmalloc/page_internal.h"
+
+namespace starboard {
+namespace shared {
+namespace posix {
+
+namespace {
+
+const CobaltExtensionMemoryMappedFileApi kMemoryMappedFileApi = {
+ kCobaltExtensionMemoryMappedFileName, 1, &SbPageMapFile,
+};
+
+} // namespace
+
+const void* GetMemoryMappedFileApi() {
+ return &kMemoryMappedFileApi;
+}
+
+} // namespace posix
+} // namespace shared
+} // namespace starboard
diff --git a/src/starboard/shared/posix/memory_mapped_file.h b/src/starboard/shared/posix/memory_mapped_file.h
new file mode 100644
index 0000000..46e47fe
--- /dev/null
+++ b/src/starboard/shared/posix/memory_mapped_file.h
@@ -0,0 +1,28 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_SHARED_POSIX_MEMORY_MAPPED_FILE_H_
+#define STARBOARD_SHARED_POSIX_MEMORY_MAPPED_FILE_H_
+
+namespace starboard {
+namespace shared {
+namespace posix {
+
+const void* GetMemoryMappedFileApi();
+
+} // namespace posix
+} // namespace shared
+} // namespace starboard
+
+#endif // STARBOARD_SHARED_POSIX_MEMORY_MAPPED_FILE_H_
diff --git a/src/starboard/tools/app_launcher_packager.py b/src/starboard/tools/app_launcher_packager.py
index b547660..48a80f4 100644
--- a/src/starboard/tools/app_launcher_packager.py
+++ b/src/starboard/tools/app_launcher_packager.py
@@ -31,8 +31,9 @@
import _env # pylint: disable=unused-import
from paths import REPOSITORY_ROOT
from paths import THIRD_PARTY_ROOT
+
sys.path.append(THIRD_PARTY_ROOT)
-# pylint: disable=g-import-not-at-top,g-bad-import-order
+# pylint: disable=g-import-not-at-top,g-bad-import-order,wrong-import-position
from starboard.tools import port_symlink
import starboard.tools.platform
@@ -44,6 +45,7 @@
('buildbot/device_server/shared/ssl_certs', '*'),
('cobalt', '*.py'),
('starboard', '*.py'),
+ ('starboard', '*.pfx'),
('starboard/tools', 'platform.py.template')
]
@@ -130,11 +132,11 @@
# Store posix paths even on Windows so MH Linux hosts can use them.
# The template has code to re-normalize them when used on Windows hosts.
platforms_map[p] = platform_path.replace('\\', '/')
- template = string.Template(
- open(os.path.join(current_dir, 'platform.py.template')).read())
- with open(os.path.join(dest_dir, 'platform.py'), 'w+') as f:
- sub = template.substitute(platforms_map=platforms_map)
- f.write(sub.encode('utf-8'))
+ with open(os.path.join(current_dir, 'platform.py.template')) as c:
+ template = string.Template(c.read())
+ with open(os.path.join(dest_dir, 'platform.py'), 'w+') as f:
+ sub = template.substitute(platforms_map=platforms_map)
+ f.write(sub.encode('utf-8'))
logging.info('Finished baking in platform info files.')
diff --git a/src/starboard/tools/net_args.py b/src/starboard/tools/net_args.py
index b77d658..9e84048 100644
--- a/src/starboard/tools/net_args.py
+++ b/src/starboard/tools/net_args.py
@@ -12,37 +12,32 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-
"""Example script for getting the Net Args."""
from __future__ import print_function
-import pprint
-
import argparse
import socket
import sys
-import thread
import time
import threading
+
# Returns |True| if a connection was made and the NetArg payload was delivered.
# Example:
# TryConnectAndSendNetArgs('1.2.3.4', '1234', ['--argument', '--switch=value'])
-def TryConnectAndSendNetArgs(host, port, arg_list):
- arg_string = '\n'.join(arg_list)
-
+def TryConnectAndSendNetArgs(host, port):
try:
- server_socket = socket.create_connection((host, port), timeout = .5)
- result = server_socket.sendall(arg_string)
+ server_socket = socket.create_connection((host, port), timeout=.5)
server_socket.close()
return True
- except socket.timeout as err:
+ except socket.timeout:
return False
- except socket.error as (err_no, err_str):
- print(err_no, err_str)
+ except socket.error as e:
+ print(e.errno, e.strerror)
return False
+
class NetArgsThread(threading.Thread):
"""Threaded version of NetArgs"""
@@ -71,32 +66,35 @@
with self.mutex:
if self.join_called:
break
- connected_and_sent = TryConnectAndSendNetArgs(
- self.host, self.port, self.arg_list)
+ connected_and_sent = TryConnectAndSendNetArgs(self.host, self.port)
if connected_and_sent:
with self.mutex:
self.args_sent = True
break
+
def main(argv):
- parser = argparse.ArgumentParser(description = 'Connects to the weblog.')
- parser.add_argument('--host', type=str, required = False,
- default = 'localhost',
- help = "Example localhost or 1.2.3.4")
- parser.add_argument('--port', type=int, required = False, default = '49355')
- parser.add_argument('--arg', type=str, required = True)
+ parser = argparse.ArgumentParser(description='Connects to the weblog.')
+ parser.add_argument(
+ '--host',
+ type=str,
+ required=False,
+ default='localhost',
+ help='Example localhost or 1.2.3.4')
+ parser.add_argument('--port', type=int, required=False, default='49355')
+ parser.add_argument('--arg', type=str, required=True)
args = parser.parse_args(argv)
- net_args_thread = NetArgsThread(
- args.host, args.port, [args.arg])
+ net_args_thread = NetArgsThread(args.host, args.port, [args.arg])
while not net_args_thread.ArgsSent():
- print("Waiting to send arg " + args.arg + " to " + str(args.host) +
- ":" + str(args.port) + "...")
+ print('Waiting to send arg ' + args.arg + ' to ' + str(args.host) + ':' +
+ str(args.port) + '...')
time.sleep(.5)
- print("Argument", args.arg, "was sent to", \
- args.host + ":" + str(args.port))
+ print('Argument', args.arg, 'was sent to', \
+ args.host + ':' + str(args.port))
+
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
diff --git a/src/starboard/tools/net_log.py b/src/starboard/tools/net_log.py
index 0b85cfa..aaa9797 100644
--- a/src/starboard/tools/net_log.py
+++ b/src/starboard/tools/net_log.py
@@ -13,24 +13,24 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-
"""Example script for getting the Net log."""
from __future__ import print_function
import argparse
-import pprint
import select
import socket
import sys
import time
import threading
+
class NetLog:
"""
Uses a non-blocking socket to establish a connection with a
NetLog and then will allow the log to be fetched.
"""
+
def __init__(self, host, port):
self.host = host
self.port = port
@@ -47,9 +47,9 @@
self.server_socket = None
else:
return log
- except socket.error as (err_no, err_str):
- print(__file__ + ": Socket error while reading log:" \
- + str(err_no) + " - " + str(err_str))
+ except socket.error as e:
+ print(__file__ + ': Socket error while reading log:' \
+ + str(e.errno) + ' - ' + str(e.strerror))
self.server_socket = None
return None
@@ -64,28 +64,31 @@
if len(result) == 0:
return None
return result
- except socket.error as (err_no, err_str):
- if err_no == 10035: # Data not ready yet.
+ except socket.error as e:
+ if e.errno == 10035: # Data not ready yet.
return ''
else:
raise
def _TryCreateSocketConnection(self):
try:
- print("Waiting for connection to " + str(self.host) + ':' + str(self.port))
+ print('Waiting for connection to ' + str(self.host) + ':' +
+ str(self.port))
- server_socket = socket.create_connection((self.host, self.port), timeout = 1)
+ server_socket = socket.create_connection((self.host, self.port),
+ timeout=1)
server_socket.setblocking(0)
return server_socket
- except socket.timeout as err:
+ except socket.timeout:
return None
except socket.error as err:
- print("Error while trying to create socket: " + str(err))
+ print('Error while trying to create socket: ' + str(err))
return None
class NetLogThread(threading.Thread):
"""Threaded version of NetLog"""
+
def __init__(self, host, port):
super(NetLogThread, self).__init__()
self.web_log = NetLog(host, port)
@@ -111,8 +114,9 @@
with self.log_mutex:
self.log.extend(new_log)
+
def TestNetLog(host, port):
- print("Started...")
+ print('Started...')
web_log = NetLog(host, port)
while True:
@@ -123,11 +127,14 @@
def main(argv):
- parser = argparse.ArgumentParser(description = 'Connects to the weblog.')
- parser.add_argument('--host', type=str, required = False,
- default = 'localhost',
- help = "Example localhost or 1.2.3.4")
- parser.add_argument('--port', type=int, required = False, default = '49353')
+ parser = argparse.ArgumentParser(description='Connects to the weblog.')
+ parser.add_argument(
+ '--host',
+ type=str,
+ required=False,
+ default='localhost',
+ help='Example localhost or 1.2.3.4')
+ parser.add_argument('--port', type=int, required=False, default='49353')
args = parser.parse_args(argv)
thread = NetLogThread(args.host, args.port)
@@ -136,13 +143,14 @@
while True:
print(thread.GetLog(), end='')
time.sleep(.1)
- except KeyboardInterrupt as ki:
- print("\nUser canceled.")
+ except KeyboardInterrupt:
+ print('\nUser canceled.')
pass
- print("Waiting to join...")
+ print('Waiting to join...')
thread.join()
return 0
+
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
diff --git a/src/third_party/crashpad/handler/handler.gyp b/src/third_party/crashpad/handler/handler.gyp
index 1275a4d..d862d70 100644
--- a/src/third_party/crashpad/handler/handler.gyp
+++ b/src/third_party/crashpad/handler/handler.gyp
@@ -102,6 +102,7 @@
'ldflags': [
'-Wl,--as-needed',
'-Wl,-gc-sections',
+ '-Wl,-z,noexecstack',
],
}],
['OS=="win"', {
diff --git a/src/tools/gyp/pylib/gyp/msvs_emulation.py b/src/tools/gyp/pylib/gyp/msvs_emulation.py
index 3951c19..068ad1e 100755
--- a/src/tools/gyp/pylib/gyp/msvs_emulation.py
+++ b/src/tools/gyp/pylib/gyp/msvs_emulation.py
@@ -747,7 +747,6 @@
'cell_.*',
'sn_.*',
'sce_.*',
- 'is_docker',
)
env = {}
for line in output_of_set.splitlines():