Tab lifecycle

Tab is a virtual concept that refers to the WebState UI. A WebState is created then it's passed to AttachTabHelpers which creates all the other tab helpers. and attaches them to the WebState.

web::WebState::CreateParams params{...};
std::unique_ptr<web::WebState> web_state =  web::WebState::Create(params);
AttachTabHelper(web_state.get());

When a WebState is added to a Browser's WebStateList, BrowserWebStateListDelegate will invoke AttachTabHelpers if necessary.

Browser* browser = ...;
std::unique_ptr<web::WebState> web_state =  ...;
browser->GetWebStateList()->InsertWebState(0, std::move(web_state));

All Tab helpers are WebStateUserData thus they are destroyed after the WebState destructor completes.