mirror of
https://github.com/RGBCube/serenity
synced 2025-05-18 23:25:07 +00:00
LibWeb+Browser: Add ability to run Browser with the new HTML parser
You can now pass "-n" to the browser to use the new HTML parser. It's not turned on by default since it's still very immature, but this is a huge step towards bringing it into maturity. :^)
This commit is contained in:
parent
08e2907210
commit
2cb50f6750
4 changed files with 30 additions and 4 deletions
|
@ -59,6 +59,7 @@
|
||||||
|
|
||||||
namespace Browser {
|
namespace Browser {
|
||||||
|
|
||||||
|
extern bool g_use_new_html_parser;
|
||||||
extern String g_home_url;
|
extern String g_home_url;
|
||||||
|
|
||||||
Tab::Tab()
|
Tab::Tab()
|
||||||
|
@ -70,6 +71,8 @@ Tab::Tab()
|
||||||
auto& toolbar = m_toolbar_container->add<GUI::ToolBar>();
|
auto& toolbar = m_toolbar_container->add<GUI::ToolBar>();
|
||||||
m_html_widget = widget.add<Web::HtmlView>();
|
m_html_widget = widget.add<Web::HtmlView>();
|
||||||
|
|
||||||
|
m_html_widget->set_use_new_parser(g_use_new_html_parser);
|
||||||
|
|
||||||
m_go_back_action = GUI::CommonActions::make_go_back_action([this](auto&) {
|
m_go_back_action = GUI::CommonActions::make_go_back_action([this](auto&) {
|
||||||
m_history.go_back();
|
m_history.go_back();
|
||||||
update_actions();
|
update_actions();
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "InspectorWidget.h"
|
#include "InspectorWidget.h"
|
||||||
#include "Tab.h"
|
#include "Tab.h"
|
||||||
#include "WindowActions.h"
|
#include "WindowActions.h"
|
||||||
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/ConfigFile.h>
|
#include <LibCore/ConfigFile.h>
|
||||||
#include <LibCore/File.h>
|
#include <LibCore/File.h>
|
||||||
#include <LibGUI/AboutDialog.h>
|
#include <LibGUI/AboutDialog.h>
|
||||||
|
@ -44,6 +45,7 @@ namespace Browser {
|
||||||
|
|
||||||
static const char* bookmarks_filename = "/home/anon/bookmarks.json";
|
static const char* bookmarks_filename = "/home/anon/bookmarks.json";
|
||||||
String g_home_url;
|
String g_home_url;
|
||||||
|
bool g_use_new_html_parser = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,6 +61,13 @@ int main(int argc, char** argv)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* specified_url = nullptr;
|
||||||
|
|
||||||
|
Core::ArgsParser args_parser;
|
||||||
|
args_parser.add_option(Browser::g_use_new_html_parser, "Use new HTML parser", "new-parser", 'n');
|
||||||
|
args_parser.add_positional_argument(specified_url, "URL to open", "url", Core::ArgsParser::Required::No);
|
||||||
|
args_parser.parse(argc, argv);
|
||||||
|
|
||||||
GUI::Application app(argc, argv);
|
GUI::Application app(argc, argv);
|
||||||
|
|
||||||
// Connect to the ProtocolServer immediately so we can drop the "unix" pledge.
|
// Connect to the ProtocolServer immediately so we can drop the "unix" pledge.
|
||||||
|
@ -174,8 +183,8 @@ int main(int argc, char** argv)
|
||||||
};
|
};
|
||||||
|
|
||||||
URL first_url = Browser::g_home_url;
|
URL first_url = Browser::g_home_url;
|
||||||
if (app.args().size() >= 1)
|
if (specified_url)
|
||||||
first_url = URL::create_with_url_or_path(app.args()[0]);
|
first_url = URL::create_with_url_or_path(specified_url);
|
||||||
|
|
||||||
window_actions.on_create_new_tab = [&] {
|
window_actions.on_create_new_tab = [&] {
|
||||||
create_new_tab(Browser::g_home_url, true);
|
create_new_tab(Browser::g_home_url, true);
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include <LibWeb/HtmlView.h>
|
#include <LibWeb/HtmlView.h>
|
||||||
#include <LibWeb/Layout/LayoutDocument.h>
|
#include <LibWeb/Layout/LayoutDocument.h>
|
||||||
#include <LibWeb/Layout/LayoutNode.h>
|
#include <LibWeb/Layout/LayoutNode.h>
|
||||||
|
#include <LibWeb/Parser/HTMLDocumentParser.h>
|
||||||
#include <LibWeb/Parser/HTMLParser.h>
|
#include <LibWeb/Parser/HTMLParser.h>
|
||||||
#include <LibWeb/RenderingContext.h>
|
#include <LibWeb/RenderingContext.h>
|
||||||
#include <LibWeb/ResourceLoader.h>
|
#include <LibWeb/ResourceLoader.h>
|
||||||
|
@ -431,7 +432,7 @@ static String guess_mime_type_based_on_filename(const URL& url)
|
||||||
return "text/plain";
|
return "text/plain";
|
||||||
}
|
}
|
||||||
|
|
||||||
static RefPtr<Document> create_document_from_mime_type(const ByteBuffer& data, const URL& url, const String& mime_type, const String& encoding)
|
RefPtr<Document> HtmlView::create_document_from_mime_type(const ByteBuffer& data, const URL& url, const String& mime_type, const String& encoding)
|
||||||
{
|
{
|
||||||
if (mime_type.starts_with("image/"))
|
if (mime_type.starts_with("image/"))
|
||||||
return create_image_document(data, url);
|
return create_image_document(data, url);
|
||||||
|
@ -441,8 +442,14 @@ static RefPtr<Document> create_document_from_mime_type(const ByteBuffer& data, c
|
||||||
return create_markdown_document(data, url);
|
return create_markdown_document(data, url);
|
||||||
if (mime_type == "text/gemini")
|
if (mime_type == "text/gemini")
|
||||||
return create_gemini_document(data, url);
|
return create_gemini_document(data, url);
|
||||||
if (mime_type == "text/html")
|
if (mime_type == "text/html") {
|
||||||
|
if (m_use_new_parser) {
|
||||||
|
HTMLDocumentParser parser(data);
|
||||||
|
parser.run(url);
|
||||||
|
return parser.document();
|
||||||
|
}
|
||||||
return parse_html_document(data, url, encoding);
|
return parse_html_document(data, url, encoding);
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,9 @@ class HtmlView : public GUI::ScrollableWidget {
|
||||||
public:
|
public:
|
||||||
virtual ~HtmlView() override;
|
virtual ~HtmlView() override;
|
||||||
|
|
||||||
|
// FIXME: Remove this once the new parser is ready.
|
||||||
|
void set_use_new_parser(bool use_new_parser) { m_use_new_parser = use_new_parser; }
|
||||||
|
|
||||||
Document* document();
|
Document* document();
|
||||||
const Document* document() const;
|
const Document* document() const;
|
||||||
void set_document(Document*);
|
void set_document(Document*);
|
||||||
|
@ -83,6 +86,8 @@ protected:
|
||||||
private:
|
private:
|
||||||
virtual void did_scroll() override;
|
virtual void did_scroll() override;
|
||||||
|
|
||||||
|
RefPtr<Document> create_document_from_mime_type(const ByteBuffer& data, const URL& url, const String& mime_type, const String& encoding);
|
||||||
|
|
||||||
void run_javascript_url(const String& url);
|
void run_javascript_url(const String& url);
|
||||||
void layout_and_sync_size();
|
void layout_and_sync_size();
|
||||||
void dump_selection(const char* event_name);
|
void dump_selection(const char* event_name);
|
||||||
|
@ -92,6 +97,8 @@ private:
|
||||||
|
|
||||||
bool m_should_show_line_box_borders { false };
|
bool m_should_show_line_box_borders { false };
|
||||||
bool m_in_mouse_selection { false };
|
bool m_in_mouse_selection { false };
|
||||||
|
|
||||||
|
bool m_use_new_parser { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue