def METHOD_NAME(self, url, body=None):
    headers, body = url.request(self.url, body)
    self.scroll = 0
    self.url = url
    self.history.append(url)
    self.allowed_origins = None
    if "content-security-policy" in headers:
       csp = headers["content-security-policy"].split()
       if len(csp) > 0 and csp[0] == "default-src":
            self.allowed_origins = []
            for origin in csp[1:]:
                self.allowed_origins.append(URL(origin).origin())
    self.nodes = HTMLParser(body).parse()
    self.js = JSContext(self)
    scripts = [node.attributes["src"] for node
               in tree_to_list(self.nodes, [])
               if isinstance(node, Element)
               and node.tag == "script"
               and "src" in node.attributes]
    for script in scripts:
        script_url = url.resolve(script)
        if not self.allowed_request(script_url):
            print("Blocked script", script, "due to CSP")
            continue
        header, body = script_url.request(url)
        try:
            self.js.run(body)
        except dukpy.JSRuntimeError as e:
            print("Script", script, "crashed", e)
    self.rules = self.default_style_sheet.copy()
    links = [node.attributes["href"]
             for node in tree_to_list(self.nodes, [])
             if isinstance(node, Element)
             and node.tag == "link"
             and "href" in node.attributes
             and node.attributes.get("rel") == "stylesheet"]
    for link in links:
        style_url = url.resolve(link)
        if not self.allowed_request(style_url):
            print("Blocked style", link, "due to CSP")
            continue
        try:
            header, body = style_url.request(url)
        except:
            continue
        self.rules.extend(CSSParser(body).parse())
    self.render()