Extension-solta-o-video

Solta o Vídeo

Extensão para Google Chrome (Manifest V3) que envia o vídeo principal da aba ativa para o modo Picture-in-Picture nativo do navegador. Três formas de ativar:

Se já houver um vídeo em PiP, qualquer um desses gestos fecha a janela.

Como carregar em modo desenvolvedor

  1. Abra chrome://extensions no Chrome.
  2. Ative o “Modo do desenvolvedor” no canto superior direito.
  3. Clique em “Carregar sem compactação” (Load unpacked).
  4. Selecione a pasta deste projeto (VideoToPopUp).
  5. O ícone “Solta o Vídeo” aparecerá na barra de ferramentas.

Arquitetura

Dois arquivos, cada um com uma única responsabilidade:

Essa separação elimina a duplicação da lógica de escolha de vídeo entre os dois arquivos. executeScript (em vez de chrome.tabs.sendMessage) é obrigatório aqui: só assim o Chrome propaga o gesto do usuário (clique no ícone/atalho) para dentro da página, permitindo que requestPictureInPicture() funcione — uma mensagem comum não carrega essa permissão e a chamada seria rejeitada pelo navegador.

Por que o loop de posicionamento só liga quando há vídeo

content.js não fica rodando requestAnimationFrame para sempre em toda página — a maioria das páginas não tem vídeo. Ele checa uma vez no carregamento e, se não encontrar nada, fica em espera observando mudanças no DOM (MutationObserver); o loop de posicionamento do botão só começa quando um vídeo utilizável aparece, e para sozinho se o vídeo some.

Como a extensão escolhe o vídeo

Entre os elementos <video> da página, ignora qualquer um com readyState < 1, largura ou altura zero, ou totalmente fora da área visível da tela. Entre os candidatos restantes, prioriza o vídeo que estiver tocando; em caso de empate, escolhe o de maior área visível na viewport. Como o content script roda em todos os frames (all_frames: true), vídeos dentro de <iframe> — inclusive de outra origem — também são detectados normalmente.

Privacidade e segurança