Skip to content

Commit

Permalink
fix: chrome.tabs.update return value (#39388)
Browse files Browse the repository at this point in the history
fix: chrome.tabs.update return value

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
  • Loading branch information
trop[bot] and codebytere committed Aug 7, 2023
1 parent 9b01ced commit 174696e
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 0 deletions.
14 changes: 14 additions & 0 deletions shell/browser/extensions/api/tabs/tabs_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ void ZoomModeToZoomSettings(WebContentsZoomController::ZoomMode zoom_mode,
break;
}
}

api::tabs::MutedInfo CreateMutedInfo(content::WebContents* contents) {
DCHECK(contents);
api::tabs::MutedInfo info;
info.muted = contents->IsAudioMuted();
info.reason = api::tabs::MUTED_INFO_REASON_USER;
return info;
}
} // namespace

ExecuteCodeInTabFunction::ExecuteCodeInTabFunction() : execute_tab_id_(-1) {}
Expand Down Expand Up @@ -502,11 +510,17 @@ ExtensionFunction::ResponseValue TabsUpdateFunction::GetResult() {

auto* api_web_contents = electron::api::WebContents::From(web_contents_);
tab.id = (api_web_contents ? api_web_contents->ID() : -1);

// TODO(nornagon): in Chrome, the tab URL is only available to extensions
// that have the "tabs" (or "activeTab") permission. We should do the same
// permission check here.
tab.url = web_contents_->GetLastCommittedURL().spec();

if (api_web_contents)
tab.active = api_web_contents->IsFocused();
tab.muted_info = CreateMutedInfo(web_contents_);
tab.audible = web_contents_->IsCurrentlyAudible();

return ArgumentList(tabs::Get::Results::Create(std::move(tab)));
}

Expand Down
17 changes: 17 additions & 0 deletions spec/extensions-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -918,6 +918,23 @@ describe('chrome extensions', () => {
expect(response.status).to.equal('reloaded');
});
});

it('update', async () => {
await w.loadURL(url);

const message = { method: 'update', args: [{ muted: true }] };
w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`);

const [,, responseString] = await once(w.webContents, 'console-message');
const response = JSON.parse(responseString);

expect(response).to.have.property('mutedInfo').that.is.a('object');
const { mutedInfo } = response;
expect(mutedInfo).to.deep.eq({
muted: true,
reason: 'user'
});
});
});
});
});
7 changes: 7 additions & 0 deletions spec/fixtures/extensions/tabs-api-async/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ const handleRequest = (request, sender, sendResponse) => {
chrome.tabs.reload(tabId).then(() => {
sendResponse({ status: 'reloaded' });
});
break;
}

case 'update': {
const [params] = args;
chrome.tabs.update(tabId, params).then(sendResponse);
break;
}
}
};
Expand Down
5 changes: 5 additions & 0 deletions spec/fixtures/extensions/tabs-api-async/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ const testMap = {
chrome.runtime.sendMessage({ method: 'reload' }, response => {
console.log(JSON.stringify(response));
});
},
update (params) {
chrome.runtime.sendMessage({ method: 'update', args: [params] }, response => {
console.log(JSON.stringify(response));
});
}
};

Expand Down

0 comments on commit 174696e

Please sign in to comment.