Page 1 of 2

UserAgentAndMetadata Source

Posted: Wed Apr 17, 2024 6:20 pm
by sodlf159
procedure SetMobileUserAgentAndMetadata(const UserAgent: string);
var
Params, MetadataDict, BrandDict, FullVersionDict: ICefDictionaryValue;
BrandsArray, FullVersionListArray: ICefListValue;
begin
Params := TCefDictionaryValueRef.New;
MetadataDict := TCefDictionaryValueRef.New;
BrandsArray := TCefListValueRef.New;
FullVersionListArray := TCefListValueRef.New;

BrandsArray.SetSize(1);
BrandDict := TCefDictionaryValueRef.New;
BrandDict.SetString('brand', 'Chromium');
BrandDict.SetString('version', '91');
BrandsArray.SetDictionary(0, BrandDict);


FullVersionListArray.SetSize(1);
FullVersionDict := TCefDictionaryValueRef.New;
FullVersionDict.SetString('brand', 'Chromium'); //Not:A
FullVersionDict.SetString('version', '91.0.4472.114');
FullVersionListArray.SetDictionary(0, FullVersionDict);

MetadataDict.SetList('brands', BrandsArray);
MetadataDict.SetList('fullVersionList', FullVersionListArray);
MetadataDict.SetString('platform', 'Android'); //or Windows
MetadataDict.SetString('platformVersion', '12');
MetadataDict.SetString('architecture', 'arm');
MetadataDict.SetString('model', 'SM-F916N');
MetadataDict.SetBool('mobile', true);
MetadataDict.SetString('bitness', '32');


Params.SetString('userAgent', UserAgent);
Params.SetDictionary('userAgentMetadata', MetadataDict);


Chromium1.ExecuteDevToolsMethod(0, 'Emulation.setUserAgentOverride', Params);
end;

SetMobileUserAgentAndMetadata('Mozilla/5.0 (Linux; Android 12; SM-F916N Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.64 Mobile Safari/537.36');

It also works for Windows, so please refer to it and change it before using.

Re: UserAgentAndMetadata Source

Posted: Thu Apr 18, 2024 10:07 am
by salvadordf
Thanks! :D

I just updated the MobileBrowser demo with your suggestion.

Re: UserAgentAndMetadata Source

Posted: Fri Jan 24, 2025 5:57 am
by dilfich
And how do I change the formFactors?
https://browserleaks.com/client-hints
Mobile

Code: Select all

formFactors	["Mobile"]
Emulate

Code: Select all

formFactors	[]

Re: UserAgentAndMetadata Source

Posted: Sat Jan 25, 2025 8:32 am
by salvadordf
I tried several user agent values and command line switches but I couldn't change that value.

I guess some of those detection scripts require patching Chromium in CEF.

Re: UserAgentAndMetadata Source

Posted: Sat Jan 25, 2025 11:32 pm
by dilfich
Google Chrome doesn't seem to be able to do this either(

One more question, what is the difference between the methods? :?

Code: Select all

Emulation.setUserAgentOverride
and
Network.setUserAgentOverride
They seem to work the same way, what's the catch?

Re: UserAgentAndMetadata Source

Posted: Sun Jan 26, 2025 2:09 pm
by salvadordf
I don't know the internal implementation details of those methods but they seem to be identical. :shock:

Re: UserAgentAndMetadata Source

Posted: Fri Jan 31, 2025 6:26 pm
by sodlf159
dilfich wrote: Fri Jan 24, 2025 5:57 am And how do I change the formFactors?
https://browserleaks.com/client-hints
Mobile

Code: Select all

formFactors	["Mobile"]
Emulate

Code: Select all

formFactors	[]
Nothing comes from the CDP formula.

There is no problem at all even if it is treated as [].
No security reference yet

Re: UserAgentAndMetadata Source

Posted: Fri Jan 31, 2025 6:27 pm
by sodlf159
dilfich wrote: Sat Jan 25, 2025 11:32 pm Google Chrome doesn't seem to be able to do this either(

One more question, what is the difference between the methods? :?

Code: Select all

Emulation.setUserAgentOverride
and
Network.setUserAgentOverride
They seem to work the same way, what's the catch?
F12
Network or
Emulation

It's just a difference.
What would be more accurate would be to apply both.

Additionally, CDP must be reapplied every time the page is moved.

CDP > ExecuteDevToolsMethod
https://chromedevtools.github.io/devtools-protocol/

Re: UserAgentAndMetadata Source

Posted: Wed Feb 05, 2025 12:01 pm
by dilfich
About reuse, it is not entirely clear how to check that it is necessary? :?


And the question is probably not quite on the topic, how do I change the cursor to the touchpad?
OSR
Emulation.setEmitTouchEventsForMouse (Online tests are impossible without this emulation.)

Code: Select all

OnCursorChange
Cursor := CefCursorToWindowsCursor(cursorType);
TCefCursorType - It doesn't seem to be here.
circle, I can't take a screenshot
It's just not clear when emulation is enabled and when it's not.

Re: UserAgentAndMetadata Source

Posted: Wed Feb 05, 2025 5:50 pm
by sodlf159
https://chromedevtools.github.io/devtools-protocol/tot/Emulation/#method-setEmitTouchEventsForMouse