chrome.storage.managed policy values not applying to Chrome extension

243 views
Skip to first unread message

Dan Ridd

unread,
Jun 27, 2025, 9:44:47 AMJun 27
to Chromium Extensions

I have a Chrome extension that declares a managed schema in its manifest.json:


“storage”: {

“managed_schema”: “schema.json”

}


and a matching schema.json:


{

“type”: “object”,

“properties”: {

“apiKey”: { “type”: “string” },

“subdomain”: { “type”: “string” }

}

}


What I’ve done so far:

  1. Published the extension to the Chrome Web Store (version 1.10.12).

  2. In Google Admin Console → Devices → Chrome → Apps & extensions → User app settings, selected my OU and in “Policy for extensions” pasted this one-line JSON:

    {“??key??”:{“apiKey”:”<API_KEY>”,“subdomain”:”domain”}}

  3. Forced install and pinned the extension to my test users.

  4. On the test machine:

    • Ran chrome://policy → Reload policies → I see apiKey & subdomain listed under “Hub Beta” but both with Status: Not set.

    • In the Service Worker console ran:

    chrome.storage.managed.get(null, console.log)

    which returns {}.


I have also tried:

– Using the wildcard format {”*”:{…}}

– Assigning the policy to a Group versus an OU

– Waiting over 60 minutes for propagation

– Verifying the extension ID via chrome.runtime.id


Expected behavior:

Policy values should show up under chrome://policy with Status: OK, and chrome.storage.managed.get() should return:

{ apiKey: “<API_KEY>”, subdomain: “” }


Actual behavior:

Policy keys appear, but values remain “Not set,” and chrome.storage.managed.get() always returns an empty object.


Questions:

– Am I missing a required step in Admin Console to activate the JSON policy block?

– Is there a known propagation delay or additional enrollment requirement?

– Are there any Chrome Enterprise policy pitfalls I’ve overlooked?


Thanks in advance for any guidance!

Oliver Dunk

unread,
Jun 27, 2025, 10:43:34 AMJun 27
to Dan Ridd, Chromium Extensions
Hi Dan,

Have you tried entering the following into the "Policy for extensions" field?

```
{"apiKey": "<API_KEY>", "subdomain": "domain"}
```

I'm not sure to what extent things were changed when copying over to the mailing list, but the `??key??` field is not necessary as far as I know.

Am I missing a required step in Admin Console to activate the JSON policy block?

The steps you are taking generally sound good.

Is there a known propagation delay or additional enrollment requirement?

There is always a propagation delay, but I'm not certain what it would be in this case. 

Are there any Chrome Enterprise policy pitfalls I’ve overlooked?

Not that I'm aware of, but of course we should figure out what is happening :) 
Oliver Dunk | DevRel, Chrome Extensions | https://developer.chrome.com/ | London, GB


--
You received this message because you are subscribed to the Google Groups "Chromium Extensions" group.
To unsubscribe from this group and stop receiving emails from it, send an email to chromium-extens...@chromium.org.
To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/chromium-extensions/2f333ec4-520f-4106-88f9-5fa964a3657an%40chromium.org.

Dan Ridd

unread,
Jul 2, 2025, 2:17:10 AMJul 2
to Oliver Dunk, Chromium Extensions

Hi Oliver,


I’m still seeing chrome.storage.managed.get() return an empty object, even though my policy appears under Policy for extensions in Admin Console. I’ve waited several days for propagation and tried all the usual troubleshooting steps but values remain “Not set.”


Environment & Setup

  • Chrome version: 137.0.7151.120  (macOS Catalina)

  • Extension ID: omfggmeppikhemifplebilklcmlekded

  • Manifest (v3) includes: “storage”: { “managed_schema”: “schema.json” }

  • schema.json at the package root: { “type”: “object”, “properties”: { “apiKey”: { “type”: “string” }, “subdomain”: { “type”: “string” } } }

  • Policy JSON under User app settings → Policy for extensions (OU scoped): {“apiKey”:”<MY_API_KEY>”,“subdomain”:”<MY_SUBDOMAIN>”}

  • Installed via: Force-install + pin via Admin Console

  • Browser profile shows “Managed by our domain”


What I’ve tried

  1. Flat vs. wildcard JSON ({”*”:{…}})

  2. Scoping policy to both OU and group

  3. Waiting 72+ hours, relaunching Chrome, chrome://policy → Reload policies

  4. Verifying extension ID with chrome.runtime.id

  5. Confirming service worker is active and logging—chrome.storage.managed.get(null, console.log) returns {}


Observed

  • In chrome://policy, both apiKey & subdomain appear under Hub Beta but with Status: Not set

  • In the service-worker console, chrome.storage.managed.get() yields an empty object


Questions

  1. Is there an additional enrollment step (e.g., Chrome Browser Cloud Management) required before extension policies are honored?

  2. Beyond waiting, are there known propagation delays for extension-level policies?

  3. Any other pitfalls or debug approaches I should consider?


Thanks in advance for any guidance!




photo
Dan Ridd
Director, Clearsound Productions Ltd
10 Tilemans Park, Shipston on Stour, CV36 4GX
IMPORTANT: The contents of this email and any attachments are confidential. They are intended for the named recipient(s) only. If you have received this email by mistake, please notify the sender immediately and do not disclose the contents to anyone or make copies thereof.







Rudy Jdira

unread,
Jul 2, 2025, 6:56:10 AMJul 2
to Chromium Extensions, Dan Ridd, Chromium Extensions, Oliver Dunk
Hello Dan,

This is the json you need to paste in the section "Policy for extensions":

{
  "apiKey": {
    "Value": "yourKey"
  },
  "subdomain": {
    "Value": "yourSubdomain"
  }
}


Hope this helps

Regards

Rudy

Dan Ridd

unread,
Jul 2, 2025, 7:51:03 AMJul 2
to Rudy Jdira, Chromium Extensions, Oliver Dunk
Hi Rudy

Thank you so so much, that works, I’ve been battling with this 1 for weeks!!
Reply all
Reply to author
Forward
0 new messages