Stable Channel Update for ChromeOS / ChromeOS Flex

ChromeOS M115 Stable

The Stable channel is being updated to OS version: 15474.84.0 Browser version: 115.0.5790.182 for most ChromeOS devices.

If you find new issues, please let us know one of the following ways

  1. File a bug
  2. Visit our ChromeOS communities
    1. General: Chromebook Help Community
    2. Beta Specific: ChromeOS Beta Help Community
  3. Report an issue or send feedback on Chrome

Interested in switching channels? Find out how.

You can find the release notes here.


Security Fixes and Rewards

Note: Access to bug details and links may be kept restricted until a majority of users are updated with a fix. We will also retain restrictions if the bug exists in a third party library that other projects similarly depend on, but haven’t yet fixed.

[NA][NA] High Fixes for CVE-2023-4211 on impacted platforms

We would also like to thank all security researchers that worked with us during the development cycle to prevent security bugs from ever reaching the stable channel.


Daniel Gagnon,
Google ChromeOS

Long Term Support Channel Update for ChromeOS

 A new LTC-114 version, 114.0.5735.329 (Platform Version: 15437.66.0), is being rolled out for most ChromeOS devices. 


If you have devices in the LTC channel, they will be updated to this version. The LTS channel remains on LTS-108 until September 19th, 2023. 

Release notes for LTC-114 can be found here 
Want to know more about Long-term Support? Click here

This update contains multiple Security fixes, including:



1453465 High CVE-2023-3730 Use after free in Tab Groups
1464113 High CVE-2023-4074 Use after free in Blink Task Scheduling
1457757 High CVE-2023-4075 Use after free in Cast
1458819 High CVE-2023-4071 Heap buffer overflow in Visuals
1466183 High CVE-2023-4068 Type Confusion in V8
High CVE-2023-20593 High Fixes for CVE-2023-20593 on impacted platforms




Giuliana Pritchard 
Google Chrome OS

Chrome Beta for Desktop Update

The Beta channel has been updated to 116.0.5845.96 for Windows, Mac and Linux.

A partial list of changes is available in the Git log. Interested in switching release channels? Find out how. If you find a new issue, please let us know by filing a bug. The community help forum is also a great place to reach out for help or learn about common issues.

Daniel Yip
Google Chrome

Early Stable Update for Desktop

The Stable channel has been updated to 116.0.5845.96 for Windows and Mac as part of our early stable release to a small percentage of users. A full list of changes in this build is available in the log.


You can find more details about early Stable releases here.

Interested in switching release channels?  Find out how here. If you find a new issue, please let us know by filing a bug. The community help forum is also a great place to reach out for help or learn about common issues.


Daniel Yip

Google Chrome

Google Workspace Updates Weekly Recap – August 11, 2023

4 New updates 

Unless otherwise indicated, the features below are available to all Google Workspace customers, and are fully launched or in the process of rolling out. Rollouts should take no more than 15 business days to complete if launching to both Rapid and Scheduled Release at the same time. If not, each stage of rollout should take no more than 15 business days to complete.


Adding bulk conversion for place chips in Google Sheets
Earlier this year, we introduced a smart canvas feature that enables you to open a location directly in Google Maps and see a preview of the location or find directions when a Google Maps place chip is added to your Sheet. Starting this week, users can now convert links to place chips in bulk from the insert menu or cell menu. This time-saving update is especially helpful when formatting data in bulk for event schedules, vendor lists, trip itineraries, etc. | Rolling out now to Rapid Release and Scheduled Release domains at an extended pace (potentially longer than 15 days for feature visibility). | Learn more about inserting smart chips in your Google Sheets
Adding bulk conversion for place chips in Google Sheets
Easily set up dropdown chips in Google Sheets with a new pre-fill feature 
If you select a range of cells then insert a dropdown chip, manually entered cell data will convert to pre-fill the dropdown values. You can then use the dropdown sidebar to easily adjust the options or add styles to the dropdowns before accepting. | Learn more about creating a dropdown list with existing data
Easily set up dropdown chips in Google Sheets with a new pre-fill feature
Reorganizing the file and folder menu in Google Drive
Earlier this year, we introduced a refreshed interface for Google Drive, Google Docs, Google Sheets, and Google Slides. Building upon this, when right-clicking a file or folder in Drive, you will now see a new menu format. While the menu functionality remains the same, we’ve reordered and renamed menu items, and also added new sub-menus. 
Reorganizing the right-click menu format in Google Drive

Updated timeline for upgrading to the in-line threaded experience in Google Chat 
Earlier this year, we announced that existing spaces organized by conversation topic will be upgraded to the new in-line threaded experience by Q4 2023. We’d like to provide an update on that timing: 
  • The upgrade will start in September 2023 and is expected to be completed by the end of Q1 2024. 
Ahead of the upgrade, Google Workspace admins, partners, and resellers will receive an email with more information about what to expect before any changes are made to their experience. For more information, please refer to our previous announcement


Previous announcements

The announcements below were published on the Workspace Updates blog earlier this week. Please refer to the original blog posts for complete details.


Simplify lesson planning with shareable class templates and classwork with new Google Classroom beta 
We’re excited to announce a Google Classroom beta that will simplify lesson planning with others and make classroom materials more accessible. | Available to Education Plus only. | Learn more about the new Google Classroom beta

Updates for exporting your organization’s data 
Google Workspace customers can choose to export the data of a specific user, rather than a customer’s full set of user generated content. Additionally, you’ll notice an improved user interface for the data export tool, which provides more detailed information about exports, records a longer history of exports, and offers more features (filtered takeout). | Available to Google Workspace Business Starter, Business Standard, Business Plus, Enterprise Starter, Enterprise Essentials, Enterprise Standard, Enterprise Plus, Education Standard, Education Plus, and the Teaching and Learning Upgrade and Assured Controls customers only. | Learn more about exporting your organization’s data

Review suggested hints, add your own resources, and more for practice sets in Google Classroom We’ve announced an update that gives teachers more control over the resources for students in practice sets. | Available to Google Workspace for Education Plus and Google Workspace for Education Teaching and Learning Upgrade only. | Learn more about practice sets in Google Classroom

Expanding branding and customization capabilities in Google Slides and Google Forms 
Users now have access to a domain template with a variety of branded slides, layouts, images, colors and fonts that will appear when creating a new presentation in Slides. They also have access to a domain theme including fonts, branded colors and a header image that you can use when creating a new form or editing an existing form in Forms. | Available to Business Plus, Enterprise Standard, Enterprise Plus, Education Plus only. | Learn more about default templates & themes

Adding Gmail translation to mobile devices 
There is now a native translation integration within the Gmail mobile app that will enable you to seamlessly communicate in a wide range of languages. | Learn more about translating on mobile devices in Gmail

Google Keep integration with Assistant available to all Google Workspace users 
If you’re using the Google Assistant with your Google Workspace device, you can set Google Keep as the default provider for your notes and lists. You can ask Assistant to create a new list, add or delete items for an existing list, or read back all the list items to you. | Learn more about the Google Keep integration with Assistant

Introducing eSignature for Google Docs and Google Drive: launching to open beta for Workspace Individual subscribers, launching to beta for Google Workspace customers 
eSignature is now available as an open beta for Google Workspace Individual subscribers — no additional sign-up is required to use the feature. eSignature will be available in beta for select Google Workspace customers — see the “Additional details” section below for more information. | Eligible for beta: Google Workspace Business Standard, Business Plus, Enterprise Starter, Enterprise Standard, Enterprise Plus, Enterprise Essentials, Enterprise Essentials Plus, Education Plus, and Nonprofits customers only. | Learn more about eSignatures in Google Docs

Gallery view for Zoom interoperability on Google Meet hardware 
We’re now introducing support for Zoom’s Gallery view, which makes much better use of screen real estate and allows more participants to be seen on screen at the same time. | Available for all Google Meet hardware customers. | Learn more about Zoom interoperability for Google Meet hardware devices

Add annotations to your presentations in Google Slides 
There is a feature that lets you highlight or emphasize key content while you present in Google Slides. With the new pen tool, you can circle, underline, draw connections or make quick notes directly on your presentation. | Learn more about annotations in Google Slides

Set Context Aware Access policies for 1P & 3P applications to access Workspace APIs
Admins can now use context-aware access to block users' access to Workspace Applications via other Google (1st party) & non Google (3rd party) applications. | Available to Google Workspace Enterprise Standard, Enterprise Plus, Education Standard, Education Plus, and Cloud Identity Premium customers. | Learn more about Context Aware Access policies.


Completed rollouts

The features below completed their rollouts to Rapid Release domains, Scheduled Release domains, or both. Please refer to the original blog posts for additional details.


Rapid Release Domains: 

Scheduled Release Domains: 

Rapid and Scheduled Release Domains: 

Set Context Aware Access policies for 1P & 3P applications to access Workspace APIs

What’s changing 

Admins can now use context-aware access to block users' access to Workspace Applications via other Google (1st party) & non Google (3rd party) applications. With context-aware access, you can set different access levels to Workspace applications based on a user’s identity and the context of the request (location, device security status, IP address). 




Why it’s important 

Context aware access for APIs will enable customer admins to extend existing user/device CAA context access controls to end users attempting to access Google Workspace Applications via other Google & Non Google applications. Extending these policies to APIs that request Google Workspace core data gives admins another layer of control and security and helps protect against data exfiltration. 


Getting started 


Rollout pace 

  • This feature is available now.

Availability 

  • Available to Google Workspace Enterprise Standard, Enterprise Plus, Education Standard, Education Plus, and Cloud Identity Premium customers 

Resources 

Google Developer Groups & ecosystem partners bring Startup Success Days to 15 Indian cities

Posted by Harsh Dattani - Program Manager, Developer Ecosystem

The Indian startup ecosystem is thriving, with new startups being founded every day. The country has a large pool of talented engineers and entrepreneurs, and a growing number of investors, policy makers and new age enterprises are looking to back Indian startups.

Google Developer Groups (GDGs) in 50 key Indian cities with varying tech ecosystems across India have seen a healthy mix of developers from the startup ecosystem participating in local meetups. As a result, GDGs have created a platform in collaboration with Google to help early-stage startups accelerate their growth. GDGs across India are increasingly playing a vital role in assisting startup founders and their teams with content, networking opportunities, hackathons, bootcamps, demo days, and more.

We are pleased to announce Startup Success Days with the goal of strengthening how developer communities interact with startup founders, VCs, and Googlers to discuss, share, and learn about the latest trends like Generative AI, Google Cloud, Google Maps, and Keras.

Google Developer Groups Success Days August to October 2023

Startup Success Days will be held in 15 cities across India, starting with 8 cities in August and September: Ahmedabad, Bangalore, Hyderabad, Indore, Chennai, New Delhi, Mumbai, and Pune.

The next event will be hosted at Bangalore on August 12, 2023 at Google Office. The events will be free to attend and will be open to all startups, regardless of stage or industry. The events will cover technical topics, focused on Google technologies, and will provide opportunities for startups to receive mentorship from industry experts, network with other startups, and meet VCs to receive feedback on their business models.

Learn more and register for Startup Success Days on our website.

We look forward to seeing you there!

Harsh Dattani
Program Manager, Developer Ecosystem at Google

Choosing the right storage experience

Posted by Yacine Rezgui - Developer Relations Engineer

The upcoming stable release of Android 14 is fast approaching. Now is a great time to test your app with this new release’s changes if you haven’t done so already. With Platform Stability, you can even submit apps targeting SDK 34 to the Google Play Store.

Android 14 introduces a new feature called Selected Photos Access, allowing users to grant apps access to specific images and videos in their library, rather than granting access to all media of a given type. This is a great way for users to feel more comfortable sharing media with apps, and it's also a great way for developers to build apps that respect user privacy.

Image in four panels showing Select Photos Access being used to share media from the user's on-device library
To ease the migration for apps that currently use storage permissions, apps will run in a compatibility mode. In this mode, if a user chooses “Select photos and videos” the permission will appear to be granted, but the app will only be able to access the selected photos. The permission will be revoked when your app process is killed or in the background for a certain time (similar to one time permissions). When the permission is once again requested by your app, users can select a different set of pictures or videos if they wish. Instead of letting the system manage this re-selection, it’s recommended for apps to handle this process to have a better user experience.

Image in four panels showing media reselection being used to update user's choice of which media to be shared

Choosing the right storage experience

Even when your app correctly manages media re-selection, we believe that for the vast majority of apps, the permissionless photo picker that we introduced last year will be the best media selection solution for both user experience and privacy. Most apps allow users to choose media to do tasks such as attaching to an email, changing a profile picture, sharing with friends, and the Android photo picker's familiar UI gives users a consistent, high-quality experience that helps users grant access in confidence, allowing you to focus on the differentiating features of your app. If you absolutely need a more tightly integrated solution, integrating with MediaStore can be considered as an alternative to the photo picker.


Android photo picker

Image of My Profile page on a mobile device

To use the photo picker in your app, you only need to register an activity result:

// Using Jetpack Compose, you should use rememberLauncherForActivityResult instead of registerForActivityResult // Registers a photo picker activity launcher in single-select mode val pickMedia = registerForActivityResult(PickVisualMedia()) { uri -> // Callback is invoked after the user selects a media item or closes the photo picker if (uri != null) { Log.d("PhotoPicker", "Selected URI: $uri") } else { Log.d("PhotoPicker", "No media selected") } }

The photo picker allows customization of media type selection between photos, videos, or a specific mime type when launched:

// Launch the photo picker and let the user choose images and videos. pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo)) // Launch the photo picker and let the user choose only images. pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly)) // Launch the photo picker and let the user choose only videos. pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly)) // Launch the photo picker and let the user choose only images/videos of a // specific MIME type, like GIFs. pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType("image/gif")))

You can set a maximum limit when allowing multiple selections:

// Registers a photo picker activity launcher in multi-select mode. // In this example, the app lets the user select up to 5 media files. val pickMultipleMedia = registerForActivityResult(PickMultipleVisualMedia(5)) { uris -> // Callback is invoked after the user selects media items or closes the // photo picker. if (uris.isNotEmpty()) { Log.d("PhotoPicker", "Number of items selected: ${uris.size}") } else { Log.d("PhotoPicker", "No media selected") } }

Lastly, you can enable the photo picker support on older devices from Android KitKat onwards (API 19+) using Google Play services, by adding this entry to your AndroidManifest.xml file:

<!-- Prompt Google Play services to install the backported photo picker module --> <service android:name="com.google.android.gms.metadata.ModuleDependencies" android:enabled="false" android:exported="false" tools:ignore="MissingClass"> <intent-filter> <action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" /> </intent-filter> <meta-data android:name="photopicker_activity:0:required" android:value="" /> </service>

In less than 20 lines of code you have a well-integrated photo/video picker within your app that doesn’t require any permissions!


Creating your own gallery picker

Creating your own gallery picker requires extensive development and maintenance, and the app needs to request storage permissions to get explicit user consent, which users can deny, or, as of Android 14, limit access to selected media.

First, request the correct storage permissions in the Android manifest depending on the OS version:

<!-- Devices running up to Android 12L --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Devices running Android 13+ --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- To handle the reselection within the app on Android 14+ (when targeting API 33+) --> <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />

Then, the app needs to request the correct runtime permissions, also depending on the OS version:

val requestPermissions = registerForActivityResult(RequestMultiplePermissions()) { results -> // Handle permission requests results // See the permission example in the Android platform samples: https://github.com/android/platform-samples } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { requestPermissions.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_VISUAL_USER_SELECTED)) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { requestPermissions.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO)) } else { requestPermissions.launch(arrayOf(READ_EXTERNAL_STORAGE)) }

With the Selected Photos Access feature in Android 14, your app should adopt the new READ_MEDIA_VISUAL_USER_SELECTED permission to control media re-selection, and update your app’s UX to let users grant your app access to a different set of images and videos.

When opening the selection dialog, photos and/or videos will be shown depending on the permissions requested: if you're requesting the READ_MEDIA_VIDEO permission without the READ_MEDIA_IMAGES permission, only videos would appear in the UI for users to select files.

// Allowing the user to select only videos requestPermissions.launch(arrayOf(READ_MEDIA_VIDEO, READ_MEDIA_VISUAL_USER_SELECTED))

You can check if your app has full, partial or denied access to the device’s photo library and update your UX accordingly. It's even more important now to request these permissions when the app needs storage access, instead of at startup. Keep in mind that the permission grant can be changed between the onStart and onResume lifecycle callbacks, as the user can change the access in the settings without closing your app.

if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ( ContextCompat.checkSelfPermission(context, READ_MEDIA_IMAGES) == PERMISSION_GRANTED || ContextCompat.checkSelfPermission(context, READ_MEDIA_VIDEO) == PERMISSION_GRANTED ) ) { // Full access on Android 13+ } else if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && ContextCompat.checkSelfPermission(context, READ_MEDIA_VISUAL_USER_SELECTED) == PERMISSION_GRANTED ) { // Partial access on Android 14+ } else if (ContextCompat.checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PERMISSION_GRANTED) { // Full access up to Android 12 } else { // Access denied }

Once you verified you have access to the right storage permissions, you can interact with MediaStore to query the device library (whether the granted access is partial or full):

data class Media( val uri: Uri, val name: String, val size: Long, val mimeType: String, val dateTaken: Long ) // We run our querying logic in a coroutine outside of the main thread to keep the app responsive. // Keep in mind that this code snippet is querying all the images of the shared storage suspend fun getImages(contentResolver: ContentResolver): List<Media> = withContext(Dispatchers.IO) { val projection = arrayOf( Images.Media._ID, Images.Media.DISPLAY_NAME, Images.Media.SIZE, Images.Media.MIME_TYPE, ) val collectionUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // This allows us to query all the device storage volumes instead of the primary only Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL) } else { Images.Media.EXTERNAL_CONTENT_URI } val images = mutableListOf<Media>() contentResolver.query( collectionUri, projection, null, null, "${Images.Media.DATE_ADDED} DESC" )?.use { cursor -> val idColumn = cursor.getColumnIndexOrThrow(Images.Media._ID) val displayNameColumn = cursor.getColumnIndexOrThrow(Images.Media.DISPLAY_NAME) val sizeColumn = cursor.getColumnIndexOrThrow(Images.Media.SIZE) val mimeTypeColumn = cursor.getColumnIndexOrThrow(Images.Media.MIME_TYPE) while (cursor.moveToNext()) { val uri = ContentUris.withAppendedId(collectionUri, cursor.getLong(idColumn)) val name = cursor.getString(displayNameColumn) val size = cursor.getLong(sizeColumn) val mimeType = cursor.getString(mimeTypeColumn) val dateTaken = cursor.getLong(4) val image = Media(uri, name, size, mimeType, dateTaken) images.add(image) } } return@withContext images }

The code snippet above is simplified to illustrate how to interact with MediaStore. In a proper production app, you should consider using pagination with something like the Paging library to ensure good performance.

You may not need permissions

As of Android 10 (API 29), you no longer need storage permissions to add files to shared storage. This means that you can add images to the gallery, record videos and save them to shared storage, or download PDF invoices without having to request storage permissions. If your app only adds files to shared storage and does not query images or videos, you should stop requesting storage permissions and set a maxSdkVersion of API 28 in your AndroidManifest.xml:

<!-- No permission is needed to add files from Android 10 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="28" />

ACTION_GET_CONTENT behavior change

In our last storage blog post, we announced that we’ll be rolling out a behavior change whenever ACTION_GET_CONTENT intent is launched with an image and/or video mime type. If you haven’t tested yet this change, you can enable it manually on your device:

adb shell device_config put storage_native_boot take_over_get_content true

That covers how to offer visual media selection in your app with the privacy-preserving changes we've made across multiple Android releases.If you have any feedback or suggestions, submit tickets to our issue tracker.